博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Android平板电脑开发秘籍》——3.9节技巧:创建一个下拉列表式的ActionBar
阅读量:6983 次
发布时间:2019-06-27

本文共 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" };ArrayAdapter
adapter = 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" };        ArrayAdapter
adapter = 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,语句如下:

8c91919232537b25025ef0cf5e72219cfcd06ae5

图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显示出来。

5157366a0d3da144afdd9959b7895a091158cb24

转载地址:http://wxxpl.baihongyu.com/

你可能感兴趣的文章
烂泥:为KVM虚拟机添加网卡
查看>>
数据驱动安全架构升级---“花瓶”模型迎来V5.0(二)
查看>>
Sql Server 常用日期格式
查看>>
让“云”无处不在-Citrix Xenserver之一 环境搭建
查看>>
CentOS 5.5下LVM的分区管理
查看>>
Vsftp与PAM虚拟用户
查看>>
GoogleAppEngine是什么?
查看>>
利用 UML 进行实体关系建模
查看>>
WCF中的Stream操作
查看>>
.NET实现之(WebService数据提供程序)
查看>>
Spread for Windows Forms快速入门(8)---单元格中用户动作触发的事件
查看>>
XXX管理平台系统——概要
查看>>
常用思科设备图标(JPG+矢量图)
查看>>
倒排列表求交集算法 包括baeza yates的交集算法
查看>>
微信 登录 Scope 参数错误或没有 Scope 权限
查看>>
C# 温故知新 基础篇(7) 接口<思维导图>
查看>>
jQuery Makes Parsing XML Easy[转]
查看>>
CSS里常见的块级元素和行内元素
查看>>
Windows Azure Storage (4) Windows Azure Storage Service存储服务之Blob Share Access Signature
查看>>
framework调试
查看>>