本文共 3908 字,大约阅读时间需要 13 分钟。
本节书摘来自异步社区《Android平板电脑开发秘籍》一书中的第3章,第3.9节技巧:创建一个下拉列表式的ActionBar,作者 【印度】B.M. Harwani,更多章节内容可以访问云栖社区“异步社区”公众号查看
3.9 技巧:创建一个下拉列表式的ActionBar
Android平板电脑开发秘籍在下拉列表式ActionBar 中,Action项以下拉列表的形式显示出来。为了在ActionBar中显示下拉列表,请调用它的setNavigationMode()方法,把ActionBar.NAVIGATION_ MODE_LIST值作为参数传入,如下所示:actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
下拉列表以spinner方式显示一个可选项列表,用户只能从中选择一项。为了在下拉列表中显示Action项,将使用一个实现了SpinnerAdapter接口的适配器;比如,你可能会用ArrayAdapter、SimpleCursorAdapter 或任何BaseAdapter。在接下来要创建的应用程序中,将使用ArrayAdapter,因为它是最简单的适配器,可以作为Selection Widget的数据源来使用。可以按照以下步骤来创建应用程序。
(1)定义一个字符串数组,里面包含了需要显示在下拉列表中的字符串。
(2)创建一个ArrayAdapter,把数组中的元素显示为下拉列表项。也就是说,把数组元素封装或加入到spinner下拉列表项中。
(3)把ArrayAdapter赋给ActionBar,以显示Action项。为了把ArrayAdapter赋给ActionBar,并为显示出来的下拉项绑定事件侦听器,需调用setListNavigationCallbacks()方法,把适配器和OnNavigationListener作为参数传入,如下所示:
String[] items = new String[] { "Create", "Insert", "Update", "Search" };ArrayAdapteradapter = new ArrayAdapter (this, android.R.layout.simple_spinner_dropdown_item, items);ActionBar actionBar = getActionBar();actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);actionBar.setListNavigationCallbacks(adapter, onNavigationItemSelected);
在上述代码中,定义了一个字符串数组items,里面包含了需要在下拉列表式ActionBar中显示的字符串。创建了名为adapter的ArrayAdapter,用于存放字符串数组项,并把数组元素加入到spinner下拉项中。
创建ActionBar对象actionBar,其导航模式设置为ActionBar.NAVIGATION_MODE_LIST。调用actionBar的setListNavigationCallbacks()方法,把ArrayAdapter、adapter和侦听器onNavigationSelected作为参数传入。给定了回调函数来处理下拉选择动作。如果用户在下拉列表中选择了一个Action项,将会调用事件处理方法onNavigationItemSelected,可以在里面编写代码来执行所需的动作。
下面尝试创建一个下拉列表式的ActionBar。首先创建一个名为ActionBarListApp的Android项目。在这个应用程序中,将以下拉列表的形式显示一些Action项。如果其中某项被选中,则相应的日志信息将会显示出来。请在Java Activity文件ActionBarListAppActivity.java中写下代码清单3-17所示的代码。
代码清单3-17 写入Java Activity 文件ActionBarListAppActivity.java的代码
package com.androidtablet.actionbarlistapp;import android.os.Bundle;import android.app.Activity;import android.app.ActionBar.OnNavigationListener;import android.app.ActionBar;import android.widget.ArrayAdapter;import android.util.Log;public class ActionBarListAppActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String[] items = new String[] { "Create", "Insert", "Update", "Search" }; ArrayAdapteradapter = new ArrayAdapter ( this, android.R.layout.simple_spinner_dropdown_item, items); ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks(adapter, onNavigationItemSelected); } OnNavigationListener onNavigationItemSelected = new OnNavigationListener() { @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { Log.d("Option ", String.valueOf(itemId) + " is selected"); return true; } };}
这里,你会注意到,当某个下拉列表中的Action项被选中时,将会调用onNavigation ItemSelected()方法。onNavigationItemSelected()方法的itemPosition和itemId参数包含了选中项的位置和ID。日志信息,即所选Action项ID将会显示出来。ID是连续赋值给下拉列表中的Action项的,起始值为0。为了启用ActionBar,请不要忘记把AndroidManifest.xml文件中的android:minSdkVersion属性值设置为11以上。
运行此应用程序,可以看到一个Spinner,如图3-9a所示。Spinner将显示下拉列表中的第一个选项:Create。默认的样式会把第一项显示为黑色,这在黑色的背景色下几乎是看不见的。请打开res/values文件夹中的styles.xml文件,添加一个名为MyActionBar的自定义Style,语句如下:
图3-9 Spinner的第一项几乎看不见(a),Spinner的第一项可以看清了(b),
选中列表后显示所有的Action项(c),被选中的列表项显示为第一项(d)添加完Style后,styles.xml文件将会如代码清单3-18所示。
代码清单3-18 写入styles.xml文件的代码
为了在应用程序中应用这个Style,请打开AndroidManifest.xml文件,并把android:theme属性值设置如下:
android:theme="@style/MyActionBar"
这条语句将样式MyActionBar应用到应用程序中。现在屏幕输出将会如图3-9b所示。当你点击Spinner时,将会打开一个下拉列表,所有的可选Action项将会显示出来(见图3-9c)。选中Action项Update,它将显示为Spinner的第一项(见图3-9d),以告知用户它被选中了。
图3-10给出了从下拉列表选中Update和Create Action项之后的日志信息。利用onNavigationItemSelected()方法的itemId参数把选中下拉项的ID显示出来。
转载地址:http://wxxpl.baihongyu.com/