PA06

来自tomtalk
跳转至: 导航搜索

6.1 Android中的UI开发

要在Android中构建用户界面,有多种方法可供选择。

  1. 可以完全用代码来构造用户界面
  2. 可以在XML中定义用户界面
  3. 先在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种按钮控件:基本按钮、图像按钮、切换按钮。

  1. Button
  2. ImageButton
  3. ToggleButton
  4. CheckBox
  5. RadioButton

ImageView控件

用于显示图像,图像可能来自一个文件、ContentProvider或图形对象等资源。甚至可以仅指定一种颜色,让ImageView显示该颜色。

日期和时间控件

  1. DatePicker
  2. TimePicker
  3. AnalogClock
  4. 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部分:

  1. 一个微调框的XML布局
  2. Java代码显示了如何创建ArrayAdapter,它的数据源在一个字符串资源文件中定义。使用此方法,不仅可以将列表内容外化到XML文件中,也可以使用本地化的版本。
  3. 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种按钮控件:基本按钮、图像按钮、切换按钮。

  1. Button
  2. ImageButton
  3. ToggleButton
  4. CheckBox
  5. RadioButton

ImageView控件

用于显示图像,图像可能来自一个文件、ContentProvider或图形对象等资源。甚至可以仅指定一种颜色,让ImageView显示该颜色。

日期和时间控件

  1. DatePicker
  2. TimePicker
  3. AnalogClock
  4. 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部分:

  1. 一个微调框的XML布局
  2. Java代码显示了如何创建ArrayAdapter,它的数据源在一个字符串资源文件中定义。使用此方法,不仅可以将列表内容外化到XML文件中,也可以使用本地化的版本。
  3. 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调试和优化布局