标签:
布局定义了可见的ui结构,比如activity的UI或者app组件。你可以通过下面两种方法来生命布局。
- 在xml文件中声明ui。Android提供了一套直接的xml词汇,对应view的类和子类。比如说组件和布局。
- 在运行时构建布局元素。你的可以通过编程来在运行时创建布局对象,或者改变他们的属性。
Android框架允许你使用一种或者集中方法来创建ui。例如你可以用xml声明app的默认的布局,包括在其中显示的元素和他们的属性。接下来你可以同哦过代码来改变这些显示对象,包括在xml中声明的对象。
使用xml的好处就是可以将显示和控制分离。你的ui描述是独立于app代码之外的,这意味着你可以修改和适配他们,而不必修改代码或者重新编译。比如你可以为不同的屏幕方向,不同的屏幕大小,不同的语言定制不同的xml布局。另外使用xml使得结构更加可视化,这使得发现问题更加容易。这个文档侧重xml的布局定义,如果你对运行时定义感兴趣可以查看ViewGroup或者View的参考。
通常,xml用来生命ui元素的词汇都是和结构的了类名紧密相关的。可以通过xml猜测出对应的类,以及通过属性猜出对应的方法。但是并不是完全相同。
更多不同类型的布局请看Common Layout Objext。在HelloViews的guide中也有介绍。
使用xml词汇你可以快速定义布局文件。如同html文件有很多内部标签。
每个布局文件都必须包含一个根标签,它必须是一个view或者viewgroup对象。定义根标签以后,你可以添加其他的对象或者组件,以子元素的形式,来逐渐构造你自己的层次树。比如下面这个包含了textView和Button的LinearLayout。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello,I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello,I am a Button" />
</LinearLayout>
当你在xml中声明了布局以后,保存为xml拓展名,并放在android工程的res/layout/文件夹下面,这样才可以正确编译。
更多的关于xml布局的语法可以在LayoutResource文档中查看。
当你编译你的工程的时候,每一个xml中的布局都会编译成为一个View资源。你可以在Activity.OnCreate的回调函数的实现中来加载资源。通过调用setContentView函数传入你的布局资源,用R.layout.layou_file_name的形式。例如你的xml布局文件的名字是main_layout.xml那么你可以加载你的Activity用这种方式。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
}
onCreate回到方法在Activity启动的时候由系统框架进行启动。关于生命周期的更多内容可以参见文档Acitivity。
每个view或者viewgroup在xml中都有特码呢的不同的xml属性。一些对于view对象来说是特有的,比如说textView支持textSize属性,同时属性在继承这些类的对象中也是存在的。一些典型的对于所有view对象都是有的属相,是应为都是从一个view类继承而来的,比如说id属性。同时,一些属性被划分为“layout parameters”,他们是用来描述布局对象的方向的,如同这个对象的母viewgroup中定义的那样。
每一个都可能有一个整形的id,用来唯一的表示树中的view。当app编译的时候,id被引用为一个integer,但是通常其在xml资源中是一个字符串。id属性。这是所有的view对象都有的属性并且使用十分频繁。Id在xml标签中的语法为。
android:id="@+id/my_button"
@标志告诉xml解析器解析后面的更多拓展,并且把他解析为id资源。+符号表示这是一个新的资源名称,必须要被加入到资源中(R.java文件)。还有以下android框架提供的id资源。当引用一个android资源id的时候,你不需要使用+,但是必须要加上android包命名空间。比如:
android:id="@android:id/empty"
使用这里出现的android包命名空间,我们引用的是android.R当中的资源类而不是本地的资源类。
为了创建view并在app中引用他们,一种典型的模式就是:
<Buttonandroid:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/my_button_text"/>
Button myButton=(Button) findViewById(R.id.my_button);
当使用relativielayout的时候,为空间生命布局是十分重要的。因为我们需要制定一些view相对于其他view的位置,需要使用id。
Id在整个树上可以不是唯一的,只需要在你搜索的一段树上是唯一的。但是搜索的树通常就是整个树,所有最好是全局唯一的。
Xml布局属性命名为layout_something的时候,就是几乎是一个确定view在viewgroup当中位置的属性。
每一个viewgroup都实现了一个拓展自ViewGroup.LayoutParms的内部类。子类包含了这些可以确定自布局尺寸和位置的参数,根据于viewgroup。如同你在图1中看到的,viewgroup为每一个子view定义了布局参数(包括子viewgroup)。
注意到每一个LayoutParam子类都有自己的设定值的语法。每一个子元素都必须定义和母view相适合的LayoutParams,尽管它其中可能也为其自己的子view定义了不同的LayoutParms。
所有的viewgroup都包含一个width和height属性(layout_width和layou_height),每一个view都必须定义这两个属性。汗多的LayoutParam中也包含可选的margins和borders属性。
你可以将height和width指定为确定的值,但是你通常都不会这么做。通常你会使用下面的参数来制定高和宽。
-wrap_content告诉你view根据他的内容的需要来限定自己。
-match_parent告诉你的组件在parentview允许的范围内尽可能的大。
通常而言,使用例如像素等的绝对数值类说明高和宽是不推荐的。取而代之的是,使用相对的测量比如说dp(density-independent pixel unite),wrapcontent或者matchparent是更好的方法。因为这保证了你的app在不同设备屏幕型号上都可以恰当地显示。可以接受的测量的类型在 Available Resource文档中进行了定义。
布局定义了可见的ui结构,比如activity的UI或者app组件。你可以通过下面两种方法来生命布局。
- 在xml文件中声明ui。Android提供了一套直接的xml词汇,对应view的类和子类。比如说组件和布局。
- 在运行时构建布局元素。你的可以通过编程来在运行时创建布局对象,或者改变他们的属性。
Android框架允许你使用一种或者集中方法来创建ui。例如你可以用xml声明app的默认的布局,包括在其中显示的元素和他们的属性。接下来你可以同哦过代码来改变这些显示对象,包括在xml中声明的对象。
使用xml的好处就是可以将显示和控制分离。你的ui描述是独立于app代码之外的,这意味着你可以修改和适配他们,而不必修改代码或者重新编译。比如你可以为不同的屏幕方向,不同的屏幕大小,不同的语言定制不同的xml布局。另外使用xml使得结构更加可视化,这使得发现问题更加容易。这个文档侧重xml的布局定义,如果你对运行时定义感兴趣可以查看ViewGroup或者View的参考。
通常,xml用来生命ui元素的词汇都是和结构的了类名紧密相关的。可以通过xml猜测出对应的类,以及通过属性猜出对应的方法。但是并不是完全相同。
更多不同类型的布局请看Common Layout Objext。在HelloViews的guide中也有介绍。
使用xml词汇你可以快速定义布局文件。如同html文件有很多内部标签。
每个布局文件都必须包含一个根标签,它必须是一个view或者viewgroup对象。定义根标签以后,你可以添加其他的对象或者组件,以子元素的形式,来逐渐构造你自己的层次树。比如下面这个包含了textView和Button的LinearLayout。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello,I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello,I am a Button" />
</LinearLayout>
当你在xml中声明了布局以后,保存为xml拓展名,并放在android工程的res/layout/文件夹下面,这样才可以正确编译。
更多的关于xml布局的语法可以在LayoutResource文档中查看。
当你编译你的工程的时候,每一个xml中的布局都会编译成为一个View资源。你可以在Activity.OnCreate的回调函数的实现中来加载资源。通过调用setContentView函数传入你的布局资源,用R.layout.layou_file_name的形式。例如你的xml布局文件的名字是main_layout.xml那么你可以加载你的Activity用这种方式。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
}
onCreate回到方法在Activity启动的时候由系统框架进行启动。关于生命周期的更多内容可以参见文档Acitivity。
每个view或者viewgroup在xml中都有特码呢的不同的xml属性。一些对于view对象来说是特有的,比如说textView支持textSize属性,同时属性在继承这些类的对象中也是存在的。一些典型的对于所有view对象都是有的属相,是应为都是从一个view类继承而来的,比如说id属性。同时,一些属性被划分为“layout parameters”,他们是用来描述布局对象的方向的,如同这个对象的母viewgroup中定义的那样。
每一个都可能有一个整形的id,用来唯一的表示树中的view。当app编译的时候,id被引用为一个integer,但是通常其在xml资源中是一个字符串。id属性。这是所有的view对象都有的属性并且使用十分频繁。Id在xml标签中的语法为。
android:id="@+id/my_button"
@标志告诉xml解析器解析后面的更多拓展,并且把他解析为id资源。+符号表示这是一个新的资源名称,必须要被加入到资源中(R.java文件)。还有以下android框架提供的id资源。当引用一个android资源id的时候,你不需要使用+,但是必须要加上android包命名空间。比如:
android:id="@android:id/empty"
使用这里出现的android包命名空间,我们引用的是android.R当中的资源类而不是本地的资源类。
为了创建view并在app中引用他们,一种典型的模式就是:
1. 在资源文件中定义一个id
<Buttonandroid:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/my_button_text"/>
2. 创建一个资源中对应的对象实例,在资源文件中捕获它。通常是在onCreate方法中。
Button myButton=(Button) findViewById(R.id.my_button);
当使用relativielayout的时候,为空间生命布局是十分重要的。因为我们需要制定一些view相对于其他view的位置,需要使用id。
Id在整个树上可以不是唯一的,只需要在你搜索的一段树上是唯一的。但是搜索的树通常就是整个树,所有最好是全局唯一的。
Xml布局属性命名为layout_something的时候,就是几乎是一个确定view在viewgroup当中位置的属性。
每一个viewgroup都实现了一个拓展自ViewGroup.LayoutParms的内部类。子类包含了这些可以确定自布局尺寸和位置的参数,根据于viewgroup。如同你在图1中看到的,viewgroup为每一个子view定义了布局参数(包括子viewgroup)。
注意到每一个LayoutParam子类都有自己的设定值的语法。每一个子元素都必须定义和母view相适合的LayoutParams,尽管它其中可能也为其自己的子view定义了不同的LayoutParms。
所有的viewgroup都包含一个width和height属性(layout_width和layou_height),每一个view都必须定义这两个属性。汗多的LayoutParam中也包含可选的margins和borders属性。
你可以将height和width指定为确定的值,但是你通常都不会这么做。通常你会使用下面的参数来制定高和宽。
-wrap_content告诉你view根据他的内容的需要来限定自己。
-match_parent告诉你的组件在parentview允许的范围内尽可能的大。
通常而言,使用例如像素等的绝对数值类说明高和宽是不推荐的。取而代之的是,使用相对的测量比如说dp(density-independent pixel unite),wrapcontent或者matchparent是更好的方法。因为这保证了你的app在不同设备屏幕型号上都可以恰当地显示。可以接受的测量的类型在 Available Resource文档中进行了定义。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myStringArray);
ListView listView = (ListView) findViewById(R.id.listview); listView.setAdapter(adapter);
String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}; int[] toViews = {R.id.display_name, R.id.phone_number};当你实例化SimpleCursorAdapter以后,传入每一个项目的布局,包含内容的Cursor,以及上面说的 两个数组。
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.person_name_and_number, cursor, fromColumns, toViews, 0); ListView listView = getListView(); listView.setAdapter(adapter);
// Create a message handling object as an anonymous class. private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { // Do something in response to the click } }; listView.setOnItemClickListener(mMessageClickedHandler);
Layout布局——翻译自developer.android.com
标签:
原文地址:http://blog.csdn.net/wallezhe/article/details/51598704