原文地址 : http://android.xsoftlab.net/training/basics/actionbar/adding-buttons.html

添加Action按钮

ActionBar允许在当前的APP上下文内添加很多重要的功能按钮。这样便可以通过图标或者文字作为功能按钮直接展示在ActionBar上。功能按钮如果没有足够空间或无足轻重的按钮都会隐藏在隐藏按钮下。

在XML指定功能

所有的功能按钮包括其它在隐藏按钮下的功能按钮都可以通过XML菜单资源来定义。为了添加功能到ActionBar,需要在res/menu/目录下创建一个新的xml文件。

为每一个需要添加到ActionBar的按钮添加一个< 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>

这里声明了当ActionBar有可用空间的时候Search功能应该作为一个按钮放在ActionBar上。但是设置按钮会总是出现在下拉列表中(默认情况下,所有的功能都会出现在下拉列表中,这对于每一个功能显示的声明你的设计意图是最好的锻炼)。

icon属性这里要求一个图片的资源ID,这里跟的是@drawable/name,这里的name必须是保存在工程中res/drawable/目录下保存的位图图像名称。比如”@drawable/ic_action_search”就是引用了一个名为ic_action_search.png的图片资源。很相似的,title属性也是使用了一个在XML文件中定义的字符串资源。

Note:当为应用创建图标或者其它的位图图像时,drawable文件夹对于提供不同版本的屏幕密度资源来说是很重要的一点。

如果为了兼容像Android 2.1这种低版本而使用了支持库,showAsAction属性对于命名空间android:是不可用的。如果要使用支持库的话必须要在XML中定义自定义的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>

添加功能按钮到ActionBar上

为了将菜单按钮直接放置到ActionBar上,需要重写实现activity中的onCreateOptionsMenu()方法,然后加载菜单资源到回调方法的参数menu对象中:

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

响应功能按钮

当用户点击了其中一个功能按钮或者其它下拉列表中按钮之后,然后系统会调用activity中的
onOptionsItemSelected()方法。在实现的这个方法中,调用回调参数MenuItem的getItemId()方法返回的值与ID进行匹配,去决定是哪个功能按钮按下的。这里的ID便是在XML中声明的< item>标签中的android:id属性中定义的。

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

为低等级的Activity添加返回按钮

Note:Gmail的返回按钮

应用中的所有Activity不都是应用的主入口,所以应该在ActionBar上提供一个返回按钮,以便让用户可以通过点击返回按钮返回到上一个屏幕页面。

当运行在Android 4.1或者更高版本上,又或者是使用了ActionBarActivity的支持库的应用,可以在清单文件中简单的申明ActionBar的返回按钮所要返回的界面:

<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);
}

因为现在系统知道了DisplayMessageActivity的父界面为MainActivity,当用户按下了返回按钮,然后系统会适当的导航界面到MainActivity,所以你不需要自己处理返回按钮的点击事件。

关于导航按钮的更多信息,请参见:Providing Up Navigation

Android官方开发文档Training系列课程中文版:添加ActionBar之添加Action按钮相关推荐

  1. Android官方开发文档Training系列课程中文版:目录

    原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...

  2. Android官方开发文档Training系列课程中文版:创建自定义View之View的创建

    原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...

  3. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  4. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建

    原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...

  5. Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的平台版本

    原文地址 : http://android.xsoftlab.net/training/basics/supporting-devices/platforms.html 每当APP使用了Android ...

  6. Android官方开发文档Training系列课程中文版:添加ActionBar之设置ActionBar

    导言- 添加ActionBar 原文地址:http://android.xsoftlab.net/training/basics/actionbar/index.html ActionBar是很多重要 ...

  7. Android官方开发文档Training系列课程中文版:构建第一款安卓应用之入门指南

    入门指南 欢迎来到安卓开发训练课,在这里你可以找到一系列课程来描述如何使用现有的代码示例来重新适用到你的APP上,你可以在左侧的导航栏顶部看到在若干个大项里有若干个有组织的子项课程.(导航栏请参见官方 ...

  8. Android官方开发文档Training系列课程中文版:分享简单数据之发送简单数据给其它APP

    原文地址:http://android.xsoftlab.net/training/building-content-sharing.html 引言 Android应用程序有一项伟大的事情就是它们有可 ...

  9. Android官方开发文档Training系列课程中文版:构建第一款安卓应用之启动另一个Activity

    原文地址:http://android.xsoftlab.net/training/basics/firstapp/starting-activity.html#CreateActivity 在完成了 ...

最新文章

  1. arttemplate 不转义html,使用artTemplate模板引擎渲染错误
  2. 浏览器中xhr选项是做什么用的呢_XHR和AJAX终于搞懂了!!
  3. 淘宝如何实现用余额和红包付款?大型分布式系统在云上实现
  4. OpenGL——使用Bresenham算法绘制圆
  5. Mac OS 在远程主机(Linux 系统)上使用命令执行 sql 脚本文件(使用的是 MySQL 数据库)
  6. 工作208:element $message居中测试无法实现
  7. web网页 页面布局的几种方式(转)
  8. mysql注入***扫描备忘;
  9. Android Studio3.5 JAVA调用C++源码方法总结
  10. 数据库新技术:分布式数据库的体系结构,特点与查询优化(思维导图版总结)
  11. c语言程序设计一至六章测验,c语言程序设计1-6章.ppt
  12. Android APP如何获取framework下的资源?
  13. 科目二 侧方位停车 流程记录 LTS
  14. 定义一个Employee类,其中包括表示姓名、街道地址、城市和邮编等属性
  15. MySql实验嵌套查询_MySQL数据库实验四:嵌套查询
  16. 协议分析(微信网页版 wx2.qq.com)
  17. listview增大条目间距
  18. golang 从windows 剪切板 (剪贴板)中读取bmp图片数据的方法
  19. windowsVS2019+PCL1.12.1系统错误“由于找不到*.dll,无法继续执行代码。重新安装程序可能会解决此问题。”
  20. SSM网上商城购物系统(前台+后台)

热门文章

  1. SQLite和MySQL数据库的区别与应用
  2. 单线程会导致死锁吗?
  3. 第3章 Linux内核调试手段之三
  4. Android binder 框架和学习资料
  5. Python3安装(Windows)
  6. 每日一题(10)—— 数组与指针
  7. who|sort实现
  8. 无向图的深度优先遍历非递归_LeetCode0429: N叉树的层序遍历
  9. 【Pytorch神经网络理论篇】 27 图神经网络DGL库:简介+安装+卸载+数据集+PYG库+NetWorkx库
  10. ES6(二)——字符串模板、标签模板字符串、函数的默认参数、剩余参数、数组对象的展开语法、数值的表示、Symbol