PA06
目录
6.1 Android中的UI开发
要在Android中构建用户界面,有多种方法可供选择。
- 可以完全用代码来构造用户界面
- 可以在XML中定义用户界面
- 先在XML中定义用户界面,然后在代码中引用它和修改它。
完全通过代码创建简单的用户界面
package com.androidbook.controls; import android.app.Activity; import android.os.Bundle; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import android.widget.TextView; public class MainActivity extends Activity { private LinearLayout nameContainer; private LinearLayout addressContainer; private LinearLayout parentContainer; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); createNameContainer(); createAddressContainer(); createParentContainer(); setContentView(parentContainer); } private void createNameContainer() { nameContainer = new LinearLayout(this); nameContainer.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); nameContainer.setOrientation(LinearLayout.HORIZONTAL); TextView nameLbl = new TextView(this); nameLbl.setText("Name: "); TextView nameValue = new TextView(this); nameValue.setText("John Doe"); nameContainer.addView(nameLbl); nameContainer.addView(nameValue); } private void createAddressContainer() { addressContainer = new LinearLayout(this); addressContainer.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); addressContainer.setOrientation(LinearLayout.VERTICAL); TextView addrLbl = new TextView(this); addrLbl.setText("Address:"); TextView addrValue = new TextView(this); addrValue.setText("911 Hollywood Blvd"); addressContainer.addView(addrLbl); addressContainer.addView(addrValue); } private void createParentContainer() { parentContainer = new LinearLayout(this); parentContainer.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); parentContainer.setOrientation(LinearLayout.VERTICAL); parentContainer.addView(nameContainer); parentContainer.addView(addressContainer); } }
完全在XML文件中创建用户界面
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- NAME CONTAINER --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Name:" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="John Doe" /> </LinearLayout> <!-- ADDRESS CONTAINER --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Address:" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="911 Hollywood Blvd." /> </LinearLayout> </LinearLayout>
使用XML结合代码构建UI …
6.2 Android中的常见控件
文本控件
- TextView控件知道如何显示文本,但不允许进行编辑。
- EditText控件的默认行为是在一行上显示文本并根据需要增加行。
- AutoCompleteTextView控件是一个具有自动完成功能的TextView。该控件仅为完整文本提供建议我,换句话说,如果键入一个句子,不会获得每个单词的建议。
- MultiAutoCompleteTextView与AutoCompleteTextView类似,区别在于,使用MultiAutoCompleteTextView时必须告诉控件在何处再次开始建议。
按钮控件
Android提供了3种按钮控件:基本按钮、图像按钮、切换按钮。
- Button
- ImageButton
- ToggleButton
- CheckBox
- RadioButton
ImageView控件
用于显示图像,图像可能来自一个文件、ContentProvider或图形对象等资源。甚至可以仅指定一种颜色,让ImageView显示该颜色。
日期和时间控件
- DatePicker
- TimePicker
- AnalogClock
- DigitalClock
MapView控件 …
6.3 适配器
在介绍Android列表控制之前,先来介绍适配器。列表控件是扩展了android.widget.AdapterView的类,包括ListView、GridView、Spinner和Gallery。
http://img6.ph.126.net/6P4Gx-ZipTX4_zy4aNAAhg==/2610680409008398336.jpg
适配器的用途是为AdapterView管理数据,并为其提供子视图。
SimpleCursorAdapter
http://img4.ph.126.net/MtawnV28KmPPQ3w9UxJ_bw==/1122803682115868554.jpg
ArrayAdapter
它是Android中最简单的适配器,专门用于列表控件。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new string[]{"Dave","Satya","Dylan"});
从字符串资源文件创建ArrayAdapter
<Spinner android:id="@+id/spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" />
Spinner spinner = (Spinner) findViewById(R.id.spinner); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter);
<?xml version="1.0" encoding="utf-8"?> <!-- This file is /res/values/planets.xml --> <resources> <string-array name="planets"> <item>Mercury</item> <item>Venus</item> <item>Earth</item> <item>Mars</item> <item>Jupiter</item> <item>Saturn</item> <item>Uranus</item> <item>Neptune</item> </string-array> </resources>
代码清单包含3部分:
- 一个微调框的XML布局
- Java代码显示了如何创建ArrayAdapter,它的数据源在一个字符串资源文件中定义。使用此方法,不仅可以将列表内容外化到XML文件中,也可以使用本地化的版本。
- XML资源文件/res/values/planets.xml,需要读取它来初始化ArrayAdaper。
Android提供的适配器
- ArrayAdapter<T>:这个适配器位于一般的任意对象数组的顶部,需要在ListView中使用。
- CursorAdapter:这个适配器也需要在ListView中使用,通过游标向列表提供数据。
- SimpleAdapter:从名称可以看出,这个适配器是一个简单适配器,它通常用于使用静态数据(可能来自资源)填充列表。
- ResourceCursorAdapter:这个适配器扩展了CursorAdapter,知道如何从资源创建视图。
- SimpleCursorAdapter:这个适配器扩展了ResourceCursorAdapter,从游标中的列创建TextView/ImageView视图。
6.4 结合使用适配和AdapterView
6.5 样式和主题
6.6 布局管理器
6.7 使用Hierarcky Viewer调试和优化布局
6.2 Android中的常见控件
文本控件
- TextView控件知道如何显示文本,但不允许进行编辑。
- EditText控件的默认行为是在一行上显示文本并根据需要增加行。
- AutoCompleteTextView控件是一个具有自动完成功能的TextView。该控件仅为完整文本提供建议我,换句话说,如果键入一个句子,不会获得每个单词的建议。
- MultiAutoCompleteTextView与AutoCompleteTextView类似,区别在于,使用MultiAutoCompleteTextView时必须告诉控件在何处再次开始建议。
按钮控件
Android提供了3种按钮控件:基本按钮、图像按钮、切换按钮。
- Button
- ImageButton
- ToggleButton
- CheckBox
- RadioButton
ImageView控件
用于显示图像,图像可能来自一个文件、ContentProvider或图形对象等资源。甚至可以仅指定一种颜色,让ImageView显示该颜色。
日期和时间控件
- DatePicker
- TimePicker
- AnalogClock
- DigitalClock
MapView控件 …
6.3 适配器
在介绍Android列表控制之前,先来介绍适配器。列表控件是扩展了android.widget.AdapterView的类,包括ListView、GridView、Spinner和Gallery。
http://img6.ph.126.net/6P4Gx-ZipTX4_zy4aNAAhg==/2610680409008398336.jpg
适配器的用途是为AdapterView管理数据,并为其提供子视图。
SimpleCursorAdapter
http://img4.ph.126.net/MtawnV28KmPPQ3w9UxJ_bw==/1122803682115868554.jpg
ArrayAdapter
它是Android中最简单的适配器,专门用于列表控件。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, new string[]{"Dave","Satya","Dylan"});
从字符串资源文件创建ArrayAdapter <Spinner android:id="@+id/spinner" android:layout_width="wrap_content" android:layout_height="wrap_content" />
Spinner spinner = (Spinner) findViewById(R.id.spinner); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter);
<?xml version="1.0" encoding="utf-8"?> <resources>
<string-array name="planets"> <item>Mercury</item> <item>Venus</item> <item>Earth</item> <item>Mars</item> <item>Jupiter</item> <item>Saturn</item> <item>Uranus</item> <item>Neptune</item> </string-array>
</resources>
代码清单包含3部分:
- 一个微调框的XML布局
- Java代码显示了如何创建ArrayAdapter,它的数据源在一个字符串资源文件中定义。使用此方法,不仅可以将列表内容外化到XML文件中,也可以使用本地化的版本。
- XML资源文件/res/values/planets.xml,需要读取它来初始化ArrayAdaper。
Android提供的适配器
- ArrayAdapter<T>:这个适配器位于一般的任意对象数组的顶部,需要在ListView中使用。
- CursorAdapter:这个适配器也需要在ListView中使用,通过游标向列表提供数据。
- SimpleAdapter:从名称可以看出,这个适配器是一个简单适配器,它通常用于使用静态数据(可能来自资源)填充列表。
- ResourceCursorAdapter:这个适配器扩展了CursorAdapter,知道如何从资源创建视图。
- SimpleCursorAdapter:这个适配器扩展了ResourceCursorAdapter,从游标中的列创建TextView/ImageView视图。