WEBAPP开发教程Android轩辕剑之ActionBar之二
凌雪 2018-10-25 来源 :网络 阅读 887 评论 0

摘要:本文将带你了解WEBAPP开发教程Android轩辕剑之ActionBar之二,希望本文对大家学WEBAPP有所帮助。

本文将带你了解WEBAPP开发教程Android轩辕剑之ActionBar之二,希望本文对大家学WEBAPP有所帮助。


使用应用程序图标来导航
        默认情况下,应用程序图标显示在action bar的左边。你能够把这个图标当做action item来使用。应用程序应该在这个图标上响应以下两个操作之一:
    返回应用程序的“主”Activity,返回“home”界面;
    向应用程序上层结构返回。
            当用户触摸这个图标时,系统会调用Activity带有android.R.id.home ID的onOptionsItemSelected()方法。在这个响应中,你既可以启动home屏幕,也可以返回你的应用程序结构化层次中用户上一步操作的界面。
        如果你要通过应用程序图标的响应来返回home屏幕,那么就应该在Intent对象中包含FLAG_ACTIVITY_CLEAR_TOP标识。用这个标志,如果你要启动的Activity在当前任务中已经存在,那么,堆栈中这个Activity之上的所有的Activity都有被销毁,并且把这个Activity显示给用户。添加这个标志往往是重要的,因为返回home屏幕相当与一个回退的动作,而不是创建。
        下面例子的onOptionsItemSelected()方法实现了返回应用程序的home屏幕的操作。@Override public boolean   onOptionsItemSelected(MenuItem item) {       switch (item.getItemId()) {           case android.R.id.home:               // 在action bar点击app icon; 回到 home             Intent intent = new Intent(this,   HomeActivity.class);               intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);             startActivity(intent);             return true;         default:             return   super.onOptionsItemSelected(item);       } }        在用户从另一个应用程序进入当前Activity的情况下,你可能还想要添加FLAG_ACTIVITY_NEW_TASK标识。这个标识确保在用户返回home或上级界面时,新的Activity不会被添加到当前的任务中,而是在属于你自己的应用程序的任务中启动。例如,如果用户通过另一个应用程序调用的Intent对象启动了你的应用程序中的一个Activity,那么用户选择action bar图标来返回home或上级界面时,FLAG_ACTIVITY_CLEAR_TOP标识会在属于你的应用程序的任务中启动这个Activity(不是当前任务)。系统既可以用这个新的Activity做根Activity来启动一个新的任务,也可以把存在后台的拥有这个Activity实例的一个既存任务带到前台来,并且目标Activity会接受onNewIntent()回调。因此,如果你的Activity要接收另一个应用程序的Intent对象,那么通常应该给这个Intent对象添加FLAG_ACTIVITY_NEW_TASK标识。intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP   | Intent.FLAG_ACTIVITY_NEW_TASK);        注意:如果你要使用应用图标来返回主页,要注意从Android4.0(API 级别 14)开始,必须通过调用setHomeButtonEnabled(true)方法确保这个图标能够作为一个action item(在以前的版本,默认情况下,这个图标就能够作为一个action item的)。4.1应用程序向上导航
        作为传统的回退导航(把用户带回任务历史中的前一个窗口)的补充,你能够让action   bar图标提供向上导航的功能,它应用把用户带回到你的应用程序的上级界面。例如,当前界面时你的应用程序层次比较深的一个界面,点击应用程序图标应该返回返回上一级页面(当前界面的父界面)。
        当用户从一个应用程序导航到一个属于不同应用程序的Activity时,“回退”按钮的行为。
        但是,如果在编辑完邮件之后,想要停留在Email应用程序中,那么向上导航就允许你把用户导航到Email应用程序中编辑邮件页面的上级界面,而不是返回到前一个Activity。
        要是应用程序图标能够向上导航,就要在你的ActionBar中调用SetDisplayHomeAsUpEnabledtrue(true)方法。protected void onCreate(Bundle   savedInstanceState) {       super.onCreate(savedInstanceState);       setContentView(R.layout.main);       ActionBar actionBar = getActionBar();       actionBar.setDisplayHomeAsUpEnabled(true);     ... }        当用户触摸这个图标时,系统会调用带有android.R.id.home   ID的onOptionsItemSelected()方法。
        请记住在Intent对象中使用FLAG_ACTIVITY_CLEAR_TOP标识,以便你不会这个父Activity存在的情况下,再创建一个新的实例。例如,如果你不使用FLAG_ACTIVITY_CLEAR_TOP标识,那么向上导航后,再按回退按钮,实际上会把用户带到应用程序的下级界面,这是很奇怪的。
        注意:如果有很多用户能够到达应用程序中当前Activity的路径,那么,向上图标应该沿着当前Activity的实际启动路径逐步的向后导航。5添加Action View
            Action View是作为action item按钮的替代品显示在action bar中的一个widget。例如,如果你有一个用于搜索的可选菜单项,你可以用SearchView widget来替代action ba的搜索按钮。
        要在菜单资源中的一个item声明一个action view,你既可以使用android:actionLayout属性也android:actionViewClass属性来分别指定一个布局资源或要使用的可视构件类。<?xml   version="1.0" encoding="utf-8"?> <menu   xmlns:android="//schemas.android.com/apk/res/android">     <item   android:id="@+id/menu_search"             android:title="@string/menu_search"             android:icon="@drawable/ic_menu_search"           android:showAsAction="ifRoom|collapseActionView"             android:actionViewClass="android.widget.SearchView" />   </menu>        android:showAsAction属性也可包含“collapseActionView”属性值,这个值是可选的,并且声明了这个action view应该被折叠到一个按钮中,当用户选择这个按钮时,这个action view展开。否则,这个action view在默认的情况下是可见的,并且即便在用户不用的时候,也要占据action   bar的有效空间。如果需要给action   view添加一些事件,那么就需要在onCreateOptionsMenu()回调期间做点事。你能够通过调用带有菜单项ID的findItem()方法来获取菜单项,然后再调用getActionView()获取该元素。@Override public boolean onCreateOptionsMenu(Menu menu) {       getMenuInflater().inflate(R.menu.options, menu);     SearchView searchView = (SearchView)   menu.findItem(R.id.menu_search).getActionView();     // 配置搜索信息并添加事件监听器     ...     return super.onCreateOptionsMenu(menu);   }
    5.1处理可折叠的action   views
            Action views让你在不改变Activity或Fragment的情况下,就可以给用户提供快捷的访问和丰富的操作。但是,默认情况下让action   views可见可能不太合适。要保证action   bar的空间(尤其是在小屏幕设备上运行时),你能够把action view折叠进一个action item按钮中。当用户选择这个按钮时,action view就在action bar中显示。被折叠的时候,如果你定义了android:showAsAction=“ifRoom”属性,那么系统可能会把这个项目放到溢出菜单中,但是当用户选项了这个菜单项,它依然会显示在action
 bar中。通过给android:showAsAction属性添加“collapseActionView”属性值,你能够让action view可以折叠起来。
        因为在用户选择这个item时,系统会展开这个action view,所以你不需要在onOptionsItemSelected()回调方法中响应这个菜单项。在用户选择这个菜单项时,系统会仍然会调用onOptionsItemSelected()方法,但是除非你在方法中返回了true(指示你已经替代系统处理了这个事件),否则系统会始终展开这个action   view。
        当用户选择了action bar中的“向上”图标或按下了回退按钮时,系统也会把action view折叠起来。如果需要,你能够在代码中通过在expandActionView()和collapseActionView()方法来展开或折叠action view。
        注意:尽管把操作视窗折叠起来是可选的,但是,如果包含了SearchView对象,建议你始终把这个视窗折叠起来,只有在需要的时候,由用户选择后才把它给展开。在提供了专用的“搜索”按钮的设备上也要小心了,如果用户按下了“搜索”按钮,那么也应该把这个搜索action view给展开,简单的重写Activity的onKeyUp()回调方法,监听KEYCODE_SEARCH类型的按键事件,然后调用expandActionView()方法即可。
        如果你需要根据操作视窗的可见性来更新你的Activity,那么你可以定义一个OnActionExpandListener事件,并且用setOnActionExpandListener()方法来注册这个事件,然后就能够在操作视窗展开和折叠时接受这个回调方法了。@Override   public boolean onCreateOptionsMenu(Menu menu) {       getMenuInflater().inflate(R.menu.options, menu);     MenuItem menuItem =   menu.findItem(R.id.actionItem);       ...       menuItem.setOnActionExpandListener(new OnActionExpandListener() {         @Override         public boolean   onMenuItemActionCollapse(MenuItem item) {             return true;                  }         @Override         public boolean   onMenuItemActionExpand(MenuItem item) {             return true;          }     }); }    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之WebApp频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程