Action bar允许你为与当前应用上下文相关的最重要的action items添加action按钮。那些直接显示在action bar上的icon或者文字都被称作action buttons。那些不适合action bar或者不是那么重要的Actions将会被隐藏在action overflow(译者注:action bar最右侧的垂直的三个点)里。

图1. 一个包含Search功能的action button和用来展示附加action的action overflow。

在XML文件中指定Actions


所有的action buttons和能够在action overflow中访问到的action都是在一个XML menu resource中被定义的。要为action bar添加actions,首先在项目的res/menu/ 目录下创建一个新的XML文件。

为所有你想要添加到action bar中的item添加一个 元素。例如:

res/menu/main_activity_actions.xml

 xmlns:android="http://schemas.android.com/apk/res/android" >         android:id="@+id/action_search"          android:icon="@drawable/ic_action_search"          android:title="@string/action_search"          android:showAsAction="ifRoom" />         android:id="@+id/action_settings"          android:title="@string/action_settings"          android:showAsAction="never" />

下载 action bar icons

为了最好的适配Android iconography引导,你应该使用Action Bar Icon Pack中提供的icons。

上面的XML文件声明了Search action在action bar有空间的时候会展示为action button,而Setting action始终都要出现在overflow中。 (默认情况下,所有的actions 都出啊先在overflow中,但是为每个action声明不同的设计意图其实是件好事。)

icon 属性需要指定一个图片资源ID。以@drawable/ 开头的资源必须是你以同样的名字存放在项目的res/drawable/ 目录下的资源。例如,"@drawable/ic_action_search" 表示ic_action_search.png。同样的,title 属性使用的是一个字符串资源,它在项目的res/values/ 目录下的XML文件中被定义,就像在 Building a Simple User Interface中讨论的那样。

提示: 当为应用创建icons或者其他bitmap图片时,为不同的屏幕密度提供不同的优化的版本相当重要。这个话题会在Supporting Different Screens中有更多的讨论。

如果你的应用在使用Support LibraryshowAsAction属性并不能使用android: 这个命名空间。作为替代这个属性是由Support Library提供,并且你需要定义自己的XML命名空间同时使用它作为这个属性的前缀。(自定义的XML命名空间应该基于应用名称,但是你也可以取一个你想要的名字,同时它只在你声明过的它的文件中有效。) 例如:

res/menu/main_activity_actions.xml

 xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:yourapp="http://schemas.android.com/apk/res-auto" >         android:id="@+id/action_search"          android:icon="@drawable/ic_action_search"          android:title="@string/action_search"          yourapp:showAsAction="ifRoom"  />    ...

为Action Bar添加Actions


为了让刚才的menu items显示在action bar上,在你的activity中实现onCreateOptionsMenu() 这个回掉方法,并且为给定的参数Menu 对象设置对应的/menu目录下的XML文件。例如:

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu items for use in the action bar    MenuInflater inflater = getMenuInflater();    inflater.inflate(R.menu.main_activity_actions, menu);    return super.onCreateOptionsMenu(menu);}

响应Action Buttons


当用户点击任何一个action buttons 或者overflow中的action item,系统都会调用onOptionsItemSelected() 方法。在你对这个方法的实现中,调用参数MenuItem对象的getItemId()来获取表示被点击的item的资源ID,这个值是你在相应的 元素中声明的android:id 属性的值。

@Overridepublic boolean onOptionsItemSelected(MenuItem item) {    // Handle presses on the action bar items    switch (item.getItemId()) {        case R.id.action_search:            openSearch();            return true;        case R.id.action_settings:            openSettings();            return true;        default:            return super.onOptionsItemSelected(item);    }}

为低版本的Activity添加Up按钮


Figure 4. The Up button in Gmail.

在你的应用中,只要不是你的应用入口activity(activities that are not the "home" screen) 的所有activity都应该提供一个返回自己在应用层次结构中的逻辑父界面,通过点击action bar上的Up按钮。

当运行在Android 4.1 (API level 16) 或者更高版本的系统上时,或者当使用Support Library包提供的ActionBarActivity 时,使用Up导航需要你在manifest文件中声明父activity,同时启用action bar的Up按钮。

例如,下面显示如何在manifest文件中定义一个父activity:

 ... >    ...                android:name="com.example.myfirstapp.MainActivity" ...>        ...                    android:name="com.example.myfirstapp.DisplayMessageActivity"        android:label="@string/title_activity_display_message"        android:parentActivityName="com.example.myfirstapp.MainActivity" >                            android:name="android.support.PARENT_ACTIVITY"            android:value="com.example.myfirstapp.MainActivity" />    

然后通过调用setDisplayHomeAsUpEnabled()方法启用action bar的Up按钮:

@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_displaymessage);    getSupportActionBar().setDisplayHomeAsUpEnabled(true);    // If your minSdkVersion is 11 or higher, instead use:    // getActionBar().setDisplayHomeAsUpEnabled(true);}

由于现在系统知道MainActivity 是DisplayMessageActivity的父activity,当用户点击 Up button时,系统会自动导航到何时的父activity中——你没有必要处理Up button的点击事件。

更多有关Up导航的信息,请查阅 Providing Up Navigation。

更多相关文章

  1. Android逆向之旅---解析编译之后的AndroidManifest文件格式
  2. 自定义属性时TypedArray的使用方法
  3. Android(安卓)图片文件读取
  4. Android(安卓)APK反编译就这么简单 详解(附图)
  5. 【Android】使用Gradle打包时,获取svn的版本号,删除unalign.apk文
  6. 安卓view设置为满屏幕
  7. ym——Android从零开始(1)(Android体系架构及认识)(新)
  8. Android应用程序目录定义及使用方法
  9. android中Manifest文件的语法层次

随机推荐

  1. Internal error. Please report to http:
  2. [Android开发-异常]xxxActivity has leak
  3. Android 线程的结束,挂起和恢复
  4. Android获取控件高度如何才能不为0
  5. Android 开发系列6 安装Cordova及示例程
  6. android系统学习笔记十二
  7. Android手机开发——向SD卡上的文件追加
  8. install Android development environmen
  9. Android:EventBus向上向下传参
  10. Android打包编译流程