zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

《Android平板电脑开发秘籍》——3.9节技巧:创建一个下拉列表式的ActionBar

Android电脑列表开发 一个 创建 技巧 秘籍
2023-09-11 14:17:44 时间

本节书摘来自异步社区《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 String adapter = new ArrayAdapter String (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 String adapter = new ArrayAdapter String (

 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文件的代码

 resources 

 style name="AppBaseTheme" parent="android:Theme.Light" 

 /style 

 style name="AppTheme" parent="AppBaseTheme" 

 /style 

 style name="MyActionBar" parent="@android:style/Widget.

 Holo.Light.ActionBar" / 

 /resources 

为了在应用程序中应用这个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

Android组件化开发(七)--从零开始教你分析项目需求并实现 前面几篇文章我们封装了几个组件化功能组件:包括:**网络请求组件,图片加载请求组件,应用保活组件,音乐播放组件封装。** 每个组件都可以直接拿到自己项目中使用,当然还需根据自己项目要求进行优化。
Android组件化开发(六)-- 短视频播放组件封装 前面几篇文章我们封装了几个组件化功能组件: 包括:`网络请求组件`,`图片加载请求组件`,`应用保活组件`,`音乐播放组件封装`。 每个组件都可以直接拿到自己项目中使用,当然还需根据自己项目要求进行优化。
Android组件化开发(五)--完整版音乐播放组件的封装 前面几篇系列文章我们讲解了`组件化开发`中几个常用功能组件的开发,包括:`网络请求组件`,`图片加载请求组件`,`应用保活组件`。今天我们来封装一个`音乐播放组件`。
Android组件化开发(四)--进程保活组件的封装 前面文章我们封装了网络请求组件`lib_nework`和图片加载组件`lib_image_loader`,今天我们来封装一个进程保活的组件`lib_pull_alive`
Android组件化开发(二)--网络请求组件封装 前面一篇文章我们讲解了`maven私服`的搭建,maven私服在`组件化框架`中有一个很重要的地位就是可以将我们的`lib`库放到局域网中,供公司其他开发者使用,实现类库的分享。 下面是这个系列准备实现的一个`组件化实战项目框架`:
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。