您的位置:首页 > 移动开发 > Android开发

Android Layout研究 <一> 基础知识

2014-09-24 11:27 302 查看
在Android平台下开发已经很久了,但一直专注于NDK层,对App层程序只是一知半解.  这次借项目需要大改UI的机会,系统学习一下UI方面的知识. 

0.背景知识:

布局(Layout)是一个Activity中用户界面的架构,它定义了布局结构且存储所有将要显示给用户的元素。也就是说,Layout存储了将要显示给用户的UI框架如何,每一部份是什么内容。

在onCreate()中调用setContentView()来定义UI。 它的作用是告诉系统,将依照哪个布局创建UI。

1. 布局的声明方法:

布局的声明方法有两种:

A: 在res/layout目录创建布局文件(layout xml).

B: 在程序中实例化布局元素。

在实际使用时,经常混合使用,在XML格式的布局文件中定义布局和元素及其属性。编程时根据需要修改布局中包含元素的状态和属性。

布局文件(Layout)的创建

先想以下几个问题:

Layout文件是谁建立的?由谁建立的,我们可以自己建立么?

setContentView(int layoutResID)参数为int型。这个int型数值如何与Layout文件(如:activity_app.xml)联系起来呢?

当建立一个工程时,Eclipse通常都已经建立了一个布局文件(Layout),在res/layout目录下,是个xml文件。

我们可以建立自己的布局(Layout)文件:

在Eclipse中,File->New ->file. 选择Parent Folder为layout. 输入文件名为:test.xml

这样,就建立了自己的Layout文件。

但这个Layout xml文件,如何和一个Int型数据联系起来呢? Eclipse自动帮我们做了这件事。

打开gen/packageName/R.java

class R 包含一个静态Class ---layout.  它有个静态类成员变量test. 与我们新建的Layout --test.xml对应。

(其实可以注意到,class R中,包括很多静态类,刚好与res中项目对应起来,向Res目录中添加任何资源,都会被R.java自动记录)

这个Int型数据----R.layout.test, 其实就是Layout文件test.xml编译后的对象,不光这个Layout文件,Layout中每个元素名,都对应一个class,在加载这个Layout文件时,就对这些元素实例化

2. 布局(Layout)文件和UI的关联

如前面所说,Layout文件(如main.xml)是通过setContentView(int layoutResID)来通知系统,采用这个Layout作为UI(即将显示的)。R.layout.test是布局资源文件test.xml编译后的对象,Eclipse插件会自动在R.java文件中创建这个引用。这个Layout文件和其中每个元素都被实例化。

3. 布局文件初体验

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:background="#0099cc"

    >

     <TextView

                android:id="@+id/TextView_Sam"

                android:layout_width="fill_parent"

                android:layout_height="wrap_content"

                android:padding="60dp"

                android:textStyle="bold"

                android:text="@string/hello"

            />

     

     <Button

                android:id="@+id/Button_Sam"

                android:layout_width="fill_parent"

                android:layout_height="wrap_content"

                android:textStyle="bold"

                android:text="@string/Button"

            />

</LinearLayout>

先简单看看,这个Layout xml文件中先定义了一个框架,这个框架是LinearLayout。 其中包含两个元素:一个TextView, 一个Button。他们各自定义了自己的属性。如长宽,内容,字体等。

这其中有一些特殊的写法如:

android:id="@+id/Button_Sam"

android:text="@string/Button"

请参见附1。

附录1:

XML语法解析:

A:android:id="@+id/Button_Sam"

每个元素(View)都有一个ID作为它的唯一标识符。

字符串前的@符号表示XML解析器应该解析和扩展剩下的ID字符串,并把它作为ID资源。+符号表示这是一个新的资源名字,它必须被创建且加入到我们的资源(R.java文件,R是Resource)。Android框架提供一些其他的ID资源。当引用一个Android资
4000
源ID时,你不需要+符号,但是你必须添加android包名字空间,如下:android:id="@android:id/empty"。

B:android:text="@string/Button"

@[package:]string/some_name 

引用/res/values/strings.xml 中的some_name的内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android layout