1、使用ListView控件
ListView控件需要一个布局文件和一个数组资源填充,步骤为:
创建一个布局文件menu.xml,用于ListView的每一行:
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textColor="@android:color/background_dark"
android:shadowColor="@android:color/background_dark"
android:shadowDx="3"
android:shadowDy="3"/>
获取ListView:
ListView listView = (ListView)findViewById(R.id.listview);
接下来定义要用来填充ListView控件中各个控件(例如TextView)的字符串:
String[] items = {getResources().getString(R.string.app_name),
getResources().getString(R.string.app_name),
getResources().getString(R.string.app_name),
getResources().getString(R.string.app_name)};
使用一个数据适配器(adapter)将数据关联到您创建的布局模版menu.xml,使用哪种适配器取决于使用的数据类型,这里使用的是ArrayAdapter:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.menu , item);
1) 添加自定义分隔条:
在布局文件中的ListView下,将图形资源替换即可:
android:divider="@android:drawable/alert_dark_frame"
2) ListView选定指示器指出当前选择了哪个列表项,由属性listSelector控制。默认情况下,ListView控件的选定指示器是橙色镶边,要改变它只需要在布局文件中将listSelector属性改为自定义图形资源即可:
android:listSelector="@drawable/btnback"
2、其他类型的菜单
上下文菜单(Context menu):用户长时间按住视图对象时弹出的菜单,这种菜单通常与包含类似选项的ListView控件结合使用。当用户长时间按住特定歌曲时,将打开上下文菜单,其中包含注入Play、Delete和Add to Playlist等选项;
选项菜单(Option menus):每当用户单击手机上的Menu按钮时,都将弹出一个选项菜单。这种菜单常用于帮助用户处理应用程序设置等。
1).选项菜单的添加:
首先使用XML文件在/res/menu菜单下创建一个菜单定义资源mymenu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/settings_menu_item"
android:title="@string/app_name"
android:icon="@android:drawable/ic_menu_preferences"/>
<item
android:id="@+id/help_menu_item"
android:title="@string/hello_world"
android:icon="@android:drawable/ic_menu_help"/>
</menu>
将选项菜单加入到活动中,重写onCreateOptionsMenu()方法:
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
处理用户选择菜单,监视用户打开选项菜单并选择菜单项的操作,重写onOptionsItemSelected()方法:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.settings_menu_item:
Toast.makeText(getApplicationContext(),"1",Toast.LENGTH_LONG).show();
break;
case R.id.help_menu_item:
Toast.makeText(getApplicationContext(), "2",Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
3、TabHost的使用
使用TabHost可以在一个屏幕间对不同面板进行切换,步骤如下:
首先建立自己的.xml文件,包含TabHost,TabWidget,FramLayout:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabHost"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</FrameLayout>
</LinearLayout>
</TabHost>
注意:除了tabhost的id可以自定义以外,其他的必须使用系统的id
建立几个布局文件作为不同面板相互切换:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabHost"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</FrameLayout>
</LinearLayout>
</TabHost>
获取TabHost并初始化:
setContentView(R.layout.tabhost);
TabHost tabHost = (TabHost)findViewById(R.id.tabHost);
注册上面的两个布局文件作为tabhost的内容
(注意:如果直接在<tabhost/>下的<FrameLayout/>中设置内容,则不用这一步)
LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
inflater.inflate(R.layout.tab1, tabHost.getTabContentView());
inflater.inflate(R.layout.tab2, tabHost.getTabContentView());
构建tabSpec并添加进tabhost中:
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("taba",getResources().getDrawable(android.R.drawable.ic_menu_camera)).setContent(R.id.fl01)); tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("tabb",getResources().getDrawable(android.R.drawable.ic_menu_help)).setContent(R.id.ll02));
4、添加字符串数组资源
要创建字符串数组资源,首先要添加资源文件/res/values/arrays.xml,在该文件中,创建一个名为names<string-array>元素,再在该元素内添加若干<item>元素——每个字符串资源一个。
假定在资源文件strings.xml中穿件了如下字符串资源:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="first">我叫第一</string>
<string name="second">我叫第二</string>
<string name="third">我叫第三</string>
</resources>
在资源文件arrays.xml中,将每个字符串资源作为一项加入到字符串数组names中。例如:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="names">
<item>@string/first</item>
<item>@string/second</item>
<item>@string/third</item>
</string-array>
</resources>
保存资源文件arrays.xml。要加载字符串数组资源names,可以通过编程方式访问它,方法有:
1).通过getResource()获取并赋值给同数据类型的数组
String[] str = getResources().getStringArray(R.array.names);
2).通过给Spinner设置ArrayAdapter获取
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.names, android.R.layout.simple_spinner_item);
spinner.setAdapter(adapter);
5、使用Spinner控件
Spinner控件是一个下拉列表。在关闭状态下,Spinner控件很像下拉列表,但被激活后,它显示一个选择器窗口,而不是在住屏幕上显示一个下拉列表。
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/names"/>
其中的android:entries属性用于指定spinner控件要显示的字符串数组资源;也可以以编程方式使用setAdapter将数据绑定在spinner中;setSelection()方法指定默认选择的选项。
6、对话框合集:
Dialog:所有对话框的基类,是最简单的对话框,可用于通知用户,一般出现在屏幕的下部;
AlertDialog:包含一个、两个或三个Button控件的对话框,常用于让用户确认或拒绝操作,如删除文件;
CharacterPickerDialog:让用户选择与基本字符串相关联的特殊字符的对话框,这种对话框常用于提供一系列字符供用户选择;
DataPickerDialog:包含DataPicker控件的对话框,用于让用户输入日期;
ProgressDialog:包含Pregress控件的对话框,用于将操作的状态或进度告诉用户,如正在上传或下载数据;
TimePickerDailog:包含TimePicker控件的对话框,用于让用户输入时间;
自定义对话框:使用对话框生成器(dialog builder)自定义对话框布局。