【Android Developers Training】 7. 添加Action Buttons
注:本文翻译自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 barMenuInflater 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 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添加返回操作
图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) --><activityandroid:name="com.example.myfirstapp.MainActivity" ...>...</activity><!-- A child of the main activity --><activityandroid: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-dataandroid: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,获取更多信息。
转载于:https://www.cnblogs.com/jdneo/p/3440586.html
【Android Developers Training】 7. 添加Action Buttons相关推荐
- 【Android Developers Training】 6. 配置Action Bar
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 68. 序言:添加动画
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 8. 定义Action Bar风格
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 93. 创建一个空验证器
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 20. 创建一个Fragment
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 104. 接受地点更新
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 58. 缓存位图
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 75. 使用NSD
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 0. 序言:构建你的第一个应用
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 81. 解析XML数据
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
最新文章
- 关于组织参加2020年全国大学生智能汽车竞赛山东赛区比赛的通知
- 与1000天的我约定
- 比较强得一个个性签名
- 【干货】迅雷产品经理:浅析用户成长体系
- 虚拟计算机组成,计算机组成原理虚拟仿真实验平台研究
- 第十一章项目沟通管理重点--转载
- ALAssetsLibrary-代码操作iOS相册资源
- 【STM32】初识STM32(型号+封装+内核+储存器+时钟、复位和电源管理+工作模式+ADC)
- qwtplot设置xy坐标轴原点重合_数控机床的原点、参考点以及坐标系怎么区分?不理解很容易混淆的...
- js页面自适应屏幕大小_Web页面适配移动端方案研究
- 黑客获取数据信息的目的和进攻手段及应对之策
- 什么是webpack? ----(webpack入门)
- 本科毕设研究记录(一)————小样本综述
- Ubuntu17.10下安装TIM
- 计算机硬盘格式化三个步骤,电脑格式化五种操作方法教程
- linux环境下pytesseract的安装和央行征信中心的登录验证码识别
- Java.千呼万唤始出来
- 腾讯微信客服电话怎么直接人工服务呢
- 【数据结构与算法】迪杰斯特拉算法的介绍和最短路径问题程序实现
- 《西游记》取经路线图|思维导图简单又漂亮
热门文章
- 两道考研算法设计题- 2010 2013
- leetcode------Binary Tree Level Order Traversal II
- hdu 2528:Area(计算几何,求线段与直线交点 + 求多边形面积)
- 腾讯云dts使用注意事项
- 链家网页爬虫_R爬虫小白入门:Rvest爬链家网+分析(一)
- python自动获取北京时间_python实现定时同步本机与北京时间的方法
- Linux系统编程——vfork() 函数详解
- php上搭建dvwa,使用phpstudy在windows上搭建DVWA
- 7.2 重入锁(ReentrantLock)
- 【渝粤教育】国家开放大学2018年秋季 1121t健康教育与健康促进 参考试题