注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。

原文链接:http://developer.android.com/training/basics/actionbar/adding-buttons.html


Action Bar允许你为和应用当前Context相关的最重要的action事件添加按钮。那些在Action Bar中直接显示出来的图标或文字就是所谓的Action Buttons。在Action Bar中无法完整显示的或者不是足够重要的操作按钮,都被隐藏在了更多操作这一按钮中,如下图所示:

图1. 具有一个“搜索”的操作按钮和一个“更多操作”(action overflow)按钮(其中包含了更多的操作)的Action Bar

一). 在XML中列举出操作

所有的操作按钮还有其他在更多操按钮中的所有项目,都在一个菜单资源(menu resource)的XML文件中定义。为了把操作添加到Action Bar中,在项目的“res/menu/”目录下创建一个新的XML文件。

为每一个你希望添加到Action Bar中的项目添加一个<item>标签。例如:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:showAsAction="ifRoom" />
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:showAsAction="never" />
</menu>

上述用于声明的代码表明:如果Action Bar的空间充足,那么搜索的操作按钮将会显示,但是设置这一操作的按钮将永远在“更多操作”当中。(所有的操作都会默认的在“更多操作”中显示,但显示地为每个操作声明设计的意图是一个好的习惯)。

下载Action Bar图标:

为了和Android图标风格(iconography)达到完美的视觉效果,建议你使用Action Bar Icon Pack提供的图标。

这个“icon”属性字段需要一个图像的资源ID。在“@drawable/”之后跟随着的名字必须是一个你在项目工程的“res/drawable/”存储好的一幅位图文件。例如:“@drawable/ic_action_search”代表了“ic_action_search.png”。类似的,“title”属性字段使用的是在项目工程中“res/values/”目录下通过XML文件定义好的字符资源,这些都在Building a Simple User Interface有讨论过。(对应博客链接:http://www.cnblogs.com/jdneo/p/3439108.html

Note:

当为你的应用创建图标和其他位图时,一个很重要的事情是你最好为各种分辨率屏幕的设备准备多个版本。这些在课程:Supporting Different Screens有更多的讨论。

如果你的应用使用了Support Library来兼容低至Android 2.1版本的系统,“showAsAction”这一属性字段并不属于“android:”命名空间。不过这个属性字段由Support Library来提供,所以你必须定义你自己的XML命名空间,然后使用这个命名空间作为字段的前缀。(一个自定义的XML命名空间最好以你的应用名为基础,当然它可以是你希望的任何名字,并且它的作用域只在你声明它的文件这一范围内)例如:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
yourapp:showAsAction="ifRoom" />
...
</menu>

二). 为Action Bar添加操作

为了将这个菜单项添加进Action Bar,我们需要在你的activity中实现onCreateOptionsMenu()这一回调函数,以此来将菜单资源填充进菜单(Menu)对象中,例如:

@Override
public 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);
}

三). 操作按钮的响应

当用户按下了其中一个操作按钮,或者“更多操作”中的操作按钮,系统会调用你的activity中的回调函数onOptionsItemSelected(),在你这个方法的实现中,对参数MenuItem调用getItemId()方法来确定是哪个按钮被按下了。返回的资源ID(ResId)是和你在<item>标签中“android:id”这一属性字段所声明的ID是对应的。

@Override
public 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添加返回操作

图2. Gmail的返回按钮

所有你的应用中非主入口的画面(即指的是除了你的应用的“home”画面外的所有其他画面)必须为用户提供一个导航至应用逻辑层次结构中的父画面,这可以通过让用户按下“Action Bar”中的“返回(Up)”按钮来实现。

当在Android 4.1(API Level 16)或更高的系统版本中运行时,或者使用Support Library提供的ActionBarActivity时,实现返回的导航功能,只需要你在清单文件中声明父Activity,并且激活action bar的返回按钮。

例如,你可以在清单文件中这样写:

<application ... >
...
<!-- The main/home activity (it has no parent activity) -->
<activity
android:name="com.example.myfirstapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
android:name="com.example.myfirstapp.DisplayMessageActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName="com.example.myfirstapp.MainActivity" >
<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myfirstapp.MainActivity" />
</activity>
</application>

之后通过调用setDisplayHomeAsUpEnabled()来激活返回按钮:

@Override
public 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,当用户按下返回按钮,系统将会自动地导航至父Activity,你不需要去对返回按钮做任何事件处理。

阅读Providing Up Navigation,获取更多信息。

【Android Developers Training】 7. 添加Action Buttons的更多相关文章

  1. 【Android Developers Training】 5. 序言:添加Action Bar

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  2. 【Android Developers Training】 34. 添加一个简单的分享行为(Action)

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. 【Android Developers Training】 9. 覆盖于布局之上的Action Bar

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  4. 【Android Developers Training】 6. 配置Action Bar

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  5. 【Android Developers Training】 8. 定义Action Bar风格

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  6. 【Android Developers Training】 68. 序言:添加动画

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  7. 【Android Developers Training】 66. 添加动画

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  8. 【Android Developers Training】 4. 启动另一个Activity

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. 【Android Developers Training】 3. 构建一个简单UI

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

随机推荐

  1. Python爬虫一:爬取上交所上市公司信息

    前几天领导让写一个从新闻语料中识别上市公司的方案.上市公司属于组织机构的范畴,组织机构识别属于命名实体识别的范畴.命名实体识别包括人名.地名.组织机构等信息的识别. 要想从新闻语料中识别上市公司就需要 ...

  2. SparkMLlib分类算法之支持向量机

    SparkMLlib分类算法之支持向量机 (一),概念 支持向量机(support vector machine)是一种分类算法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最 ...

  3. Log4net日志记录、详细配置(自己使用)

    [来自百度百科的一句介绍]log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具. 1.首先添 ...

  4. Mac电脑如何搭建php环境,并且开发php.

    这篇文章主要介绍了Mac下搭建php开发环境教程,Mac OS X 内置了Apache 和 PHP,这样使用起来非常方便.本文以Mac OS X 10.12.4为例,需要的朋友可以参考下! Mac O ...

  5. 在wamp下使用netbeans开启Xdbug

    1.到http://www.xdebug.org 下载与PHP对应的xdebug版本,也可以把phpinfo源码粘贴到http://www.xdebug.org/find-binary.php,提交后 ...

  6. meta标签属性总结

    一.常见name属性.不同参数含义 meta标签的name属性语法格式是: <meta name="参数" content="具体的参数值"> 其中 ...

  7. 磁盘分区-gdisk用法

    gdisk用法 gdisk - InteractiveGUIDpartitiontable (GPT) manipulator GPTfdisk (akagdisk) isatext-modemenu ...

  8. Principal Components Regression, Pt.1: The Standard Method

    In this note, we discuss principal components regression and some of the issues with it: The need fo ...

  9. 在node.js中如何屏蔽掉favicon.ico的请求

    今天准备用node做个api出来,还没入门,遇到一个小问题,特在此记录一下! 在做路由模块的时候,发现控制台每次都会多输出一条favicon.ico的请求,对于这种又占资源,看着又碍眼的玩意,强迫症完 ...

  10. OWIN 自宿主模式WebApi项目,WebApi层作为单独类库供OWIN调用

    OWIN是Open Web Server Interface for .NET的首字母缩写,他的定义如下: OWIN在.NET Web Servers与Web Application之间定义了一套标准 ...