Android之Action Bar

  Action Bar在实际应用中,很好地为用户提供了导航,窗口位置标识,操作点击等功能。它出现于Android3.0(API 11)之后的版本中,在2.1之后的版本中也可以使用。

添加与隐藏Action Bar

  在3.0之后的版本中(android:minSdkVersion 或者 android:targetSdkVersion 属性被设置成11或者更高),默认在activity中添加了Action Bar,不用额外添加。如果不想在activity中使用Action Bar,我们可以通过设定activity的主题来实现。

  在程序运行过程中,也可以动态隐藏或者显示Action Bar:

  动态显示或隐藏将引起当前的activity界面重绘。如果需要频繁的显示或隐藏,可以使用overlay模式,将一个action bar固定在当前activity界面上方,无论显示或隐藏都不会使activity界面重绘。

为Action Bar添加Item

  action bar上通常放置着最常用的item便于用户进行操作,那些不重要的item会被隐藏于overflow 的item中。Item通常被预定义于menu资源文件中,如下:

  当一个activity启动后,在onCreateOptionsMenu()方法来填充ab中预设的item。

在item的showAsAction属性中,选项含义如下:

  1. never:永远不会显示。只会在溢出列表中显示。
  2. ifRoom:会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。
  3. always:无论是否溢出,总会显示。
  4. withText:Title会显示。
  5. collapseActionView:可拓展的Item。

处理item事件

  当用户触发item的点击事件后,通过 onOptionsItemSelected() 方法来处理事件,如下:

通过APP图标返回上一层

  单击app图标回退上一层功能与单击back返回按钮是完全不同的两个功能,后者是根据时间的顺序,向后返回到上一个用户操作界面,而不是根据app的层次结构返回。

  启用向上一层返回功能,需要调用 setDisplayHomeAsUpEnabled()方法:

  除此之外,我们还需要指定向上返回到哪个activity,根据不同情况有两种方式:

  当前activity有唯一的父activity A,即能从A这个activity跳转到当前的activity,那么可以通过在manifest文件中指定父activity:

  如果有多个父activity,则通过复写getSupportParentActivityIntent() 和onCreateSupportNavigateUpTaskStack()方法来指定要回到哪个activity。

  当用户在同一个app的若干层activity中进行操作时,单击UP进行回退,此时系统会调用getSupportParentActivityIntent()方法。由于可能存在多个父activity,在此方法中可以返回一个启动父activity的Intent。

  当用户在进行跨app的多层activity中进行操作时,单击UP进行回退,系统会调用onCreateSupportNavigateUpTaskStack()方法。此时,需要将TaskStackBuilder 传递给该方法,构造相应的回退栈。

  即使复写了getSupportParentActivityIntent()方法来指定在本app中回退的操作后,并不是一定要复写onCreateSupportNavigateUpTaskStack()方法,通过在manifest文件中指定默认activity即可。

添加Action View

  在action bar上添加action view这种小插件,可以帮助用户在不改变当前activity或fragment的情况下完成一些功能,例如搜索等等。

  通过在menu文件的item中声明actionLayout 或actionViewClass属性来指定需要使用的布局文件或者类,例如添加一个搜索控件:

  在menu文件中添加完成后,可以在onCreateOptionsMenu()方法中获取并配置该action view:

  通过将获取到的menuItem项传递给getActionView方法取得该action view,如果在11版本之上,则直接调用getActionView即可:

  通过指定collapseActionView属性可以让action view折叠起来,单击后又会出现,此时系统会自动回调onOptionsItemSelected()方法,如果你将其返回结果为true(意味着你已经处理了该事件,不要将该事件继续传递下去),则action view将无法展开。

添加Action Provider

  与action view相似,action provider使用定制的布局来取代了固定的action button. 它将一系列action放入子菜单,单击它会展示出来。

  因为action provider定义了自身的action行为,所以无需在onOptionsItemSelected()方法中监听点击事件。

  通过指定item的actionViewClass属性来指定使用的provider类,也可以通过继承并扩展ActionProvider类来自定义provider. Android预定义了一些provider,例如ShareActionProvider,便于开发者实现分享功能:

  此时,我们需要指定分享要用到的Intent。这里,我们需要获取到MenuItem并传递给getActionProvider()方法,从而获取到provider。通过setShareIntent()方法设置分享所用到的Intent, 用来初始化分享action,但用户所处的context是变化的,所以必须及时更新要分享的intent。例子如下:

  这时的shareActionProvider负责处理用户的一切交互行为,所以无需在onOptionsItemSelected()方法中处理监听事件。默认情况下,shareActionProvider记录了用户选择每个item的频率排名,并按此排名由高到低对所有item排序。

自定义provider

  我们可以通过继承扩展ActionProvider 类来自定义provider,需要覆写如下几个方法:

  • ActionProvider():构造方法中传入了app的context,应存为全局变量使用。
  • onCreateActionView(MenuItem):在这个方法中定义item中要显示的view,完成初始化view和事件监听处理等操作:

  • onPerformDefaultAction():当菜单选项从overflow中被选中,系统将会调用此方法。provider应该为菜单项提供一个默认的action。

  然而,如果provider通过onPrepareSubMenu()方法提供了子菜单,那么即使这个provider被放入了overflow中,子菜单也会被展示出来。

添加导航Tabs

  在action bar上添加导航的tabs可以帮助用户方便地切换视图,另外,这些导航tabs能很好地适配各种机型的屏幕。

  首先,我们的界面上要有一个放置fragment的viewgroup,最基本的做法如下:

    •   实现ActionBar.TabListener接口用于响应tabs的事件。
    •   实例化需要添加的tab,并为它设置响应事件。
    •   通过addTab()方法将实例化好的tab添加进去。

在这个例子中,当tab被点击时,listener将对应的fragment实例化并加入到布局中。接下来要创建tab对象并添加进action bar中。另外,需要设置setNavigationMode(NAVIGATION_MODE_TABS),使得tabs可见。下面展示如何使用listener:

  当activity停止的时候,可以记录下当前tab所处的位置( getSelectedNavigationIndex()),这样再次打开activity时,就可以看到关闭时候的tab了。

  我们也可以使用viewpager来管理fragment,我们只需在方法onTabSelected()中告诉viewpager当前选中了哪个fragment,这样就可以实现手势滑动切换view的功能了。

添加下拉导航

  下拉导航通常用于放置那些必须但不是经常用到的导航项目。添加下拉导航通常需要以下步骤:

    •   创建一个SpinnerAdapter用于提供可选择列表项。
    •   实现ActionBar.OnNavigationListener接口,监听选择事件。
    •   在activity的onCreate()中设置setNavigationMode(NAVIGATION_MODE_LIST)来使下拉列表可用。
    •   通过setListNavigationCallbacks()方法设置下拉列表的回调函数:
        actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationCallback);

  SpinnerAdapter是一个接口用于为spinner提供数据。同时,Android也提供了其他可以被继承的adapter,例如arrayadapter或simplecursoradapter。例如,通过arrayadapter创建一个使用字符串数组为数据源的adapter:

  SpinnerAdapter mSpinnerAdapter =ArrayAdapter.createFromResource(this,R.array.action_list, android.R.layout.simple_spinner_dropdown_item);

  ActionBar.OnNavigationListener 接口中需要实现选中项目的响应事件,下面例子将一个fragment加入到布局中:

时间: 2024-12-23 02:27:13

Android之Action Bar的相关文章

Android中Action Bar的使用

内容概要 示例演示和基本介绍 启用Action Bar 在Action Bar上添加按钮 自定义Action Bar样式 自动隐藏Action Bar Action Provider的使用 ActionBarSherlock的使用 示例演示和基本介绍 如果使用ActionBar则分为两种情况 1.Action Bar on devices BEFORE Android 3.0(API 11) 1).ActionBarSherlock开源库 2).ActionBarCompat library f

(Android UI)Action Bar

Action Bar 指明用户当前所在的界面,添加多个功能性按键和下拉式选择框,以提供能多功能. 主题一:让应用具备ActionBar 可能条件一:Support Android 3.0(API 11) and Above Only 步骤一:在<Application>标签中指明theme属性值,android:theme="@android:style/Theme.Hole",即可让应用具备ActionBar <application android:name=&q

[Android系列—] 4. 添加操作栏(Action Bar)

前言 操作栏是最重要的设计元素之一,使用它来实现你的应用程序活动.通过提供多种用户界面功能, 使应用程序快速和其他的Andorid应用程序一致, 以便被用户熟悉和接受. 主要功能包括: 1. 标识你的应用程序,指示在应用程序的用户的位置. 2. 能很方便的操作重要的功能(像搜索功能) 3. 导航和视图切换功能(使用制表符或下拉列表) 类似的效果如下: 设置操作栏 在基本的使用状况是, 操作栏在左边显示活动的标题和应用的图标. 类似: 设置一个基本的操作栏需要你使用的应用活动主题支持操作栏, 这和

[转]【android studio】解决layout预览出现Rendering Problems Exception Unable to find the layout for Action Bar.

在android studio中打开layout文件,发现不能预览布局,提示以下错误: Rendering Problems Exception raised during rendering: Unable to find the layout for Action Bar. 解决办法:切换到design视图,选择低一点的api版本即可.

Android UI法宝的发展Android Action Bar Style Generator

ActionBar它是3.0经UI设计规格.同时它是Google设计风格强烈推荐,如何做一个高速设计的眼睛ActionBar之.进一步,我们设置了阶段为一个入眼ActionBar模板吧,然后,Android Action Bar Style Generator就出来了:http://jgilfelt.github.io/android-actionbarstylegenerator/ 国际惯例,上图 一眼望过去,然后添加一个慷慨的小清新:大家应该都知道如何使用它.so easy! 版权声明:本文

【Android界面实现】Overlaying the Action Bar

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 本篇文章翻译自http://developer.android.com/training/basics/actionbar/overlaying.html,想查看原文的同学可以自己翻墙看. 默认的,ActionBar会出现在你的Activity的窗口上面,这样可能会减少剩下的Activity的可见区域的大小.如果,在用户的交互的过程中,你想要隐藏或者是展示ActionBar,你可以通过hide()或者是s

Android Action Bar 详解篇 .

作者原创,转载请标明出处:http://blog.csdn.net/yuxlong2010 作为Android 3.0之后引入的新的对象,ActionBar可以说是一个方便快捷的导航神器.它可以作为活动的标题,突出活动的一些关键操作(如“搜索”.“创建”.“共享”等).作为菜单的灵活使用,还可以实现类似TabWidget的标签功能以及下拉导航的功能,系统能够很好根据不同的屏幕配置来适应ActionBar的外观,配合起Fragemtn可谓是十分强大. 那么,对于今天的主角ActionBar怎么去添

Android中文翻译 - Adding the Action Bar 添加活动栏(action bar)

2014-10-28 张云飞VIR 翻译自:https://developer.android.com/training/basics/actionbar/index.html 添加活动栏(Adding the Action Bar) 译者注:我找不到更好的词汇翻译action bar,虽然我也认为 活动栏 不是个好的翻译,但总要有个中文名字.不过为了方便识别,本文仍继续使用英文的actionbar 活动栏action bar 是非常重要的设计元素之一,你可以为你的app中的activity来实

Android学习路线(七)设置Action Bar

在action bar最今本的形式中,它仅仅在左边展示了activity的标题以及应用的icon.即使在这种简单的形式中,它也只是告诉用户现在在应用的哪个activity中,同时为你的应用保持一个标识. 图1. 一个展示应用icon和activity标题的action bar 设置一个基本的action bar需要你的应用使用支持action bar的主题.如何来请求这样的主题要看你所选择的你的应用最低支持的Android版本.因此本课会根据应用支持的不同的Android最低版本分为两个部分.