1. ActionBar(活动栏)替代了显示在屏幕顶端的标题栏。主要负责显示菜单,widget,导航等功能,主要包括:
@  显示选项菜单中的菜单项到活动栏;
@  添加可交互的视图到活动栏作为活动视图;
@  使用应用的图标作为活动项,代表返回home或者向上等重要操作;
@  提供标签导航,方便不同的Fragment之间切换;
@  提供下拉导航功能。

2. Android3.0针对ActionBar新增的类如下:

ActionBar

ActionBar.LayoutParams
    android:layout_gravity:设置控件本身相对于父控件的显示位置。(而android:gravity:设置的是控件自身上面的内容位置)

ActionBar.OnMenuVisibilityListener
    onMenuVisibilityChanged(boolean isVisible)

ActionBar.OnNavigationListener
    onNavigationItemSelected(int itemPosition, long itemId)

ActionBar.Tab

ActionBar.TabListener
    onTabReselected(ActionBar.Tab tab, FragmentTransaction ft)
    onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
    onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft)

导航的三种显示模式:
NAVIGATION_MODE_STANDARD
NAVIGATION_MODE_LIST
NAVIGATION_MODE_TABS

3.  具体功能的实现

1) 隐藏、显示、删除活动栏

ActionBar actionBar = getActionBar();
actionBar.hide();
//actionBar.show(); // 显示活动栏

<!-- 删除活动栏 -->
<activity android:theme="@android:style/Theme.Holo.NoActionBar">

2) 添加活动项到活动栏
i. 利用menu目录下的布局文件,对于你想添加的每个活动项,你必须添加一个菜单项到选项菜单,并设置菜单项作为活动项;

例如下图的xml布局:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_save"
          android:icon="@drawable/ic_menu_save"
          android:title="@string/menu_save"
          android:showAsAction="ifRoom|withText" />
    <!-- 有四种属性,ifRoom,never,withText,always -->

<item android:id="@+id/menu_delete"
          android:icon="@drawable/ic_menu_delete"
          android:title="@string/menu_delete"
          android:showAsAction="ifRoom|withText" />
    <item android:id="@+id/menu_edit"
          android:icon="@drawable/ic_menu_edit"
          android:title="@string/menu_edit"
          android:showAsAction="ifRoom|withText" />
</menu>

当你的应用程序目标设为蜂巢平台时,你可以利用Action Bar部件提供的全部功能,将你的选项菜单项放在Action Bar的右上角,对用户来说使用更方便,控制该行为的主菜单项属性是android:showAsAction。
  这个属性可接受的值有:
  1、always:这个值会使菜单项一直显示在Action Bar上。
  2、ifRoom:如果有足够的空间,这个值会使菜单项显示在Action Bar上。
  3、never:这个值使菜单项永远都不出现在Action Bar上。
  4、withText:这个值使菜单项和它的图标,菜单文本一起显示。

ii. 直接在Activity里的onCreateOptionsMenu里实现,例如:

public boolean onCreateOptionsMenu(Menu menu) {
        menu.add("Normal item");
        MenuItem actionItem = menu.add("Save");
        actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        actionItem.setIcon(android.R.drawable.ic_menu_save);
        return true;
}

响应事件的调用和Options Menu的一样,都是 
   public boolean onOptionsItemSelected(MenuItem item)

3) 添加可交互的视图到活动栏作为活动视图
你可以把widget作为活动项添加到活动栏(如下图),有两种方式实现;


第一种是通过布局文件;

         <item android:id="@+id/menu_search"
                  android:title="Search"
                  android:icon="@drawable/ic_menu_search"
                  android:showAsAction="ifRoom"
                  android:actionLayout="@layout/searchview" />

第二种是通过指定活动视图的全修饰名,即包名和类名;

    <item android:id="@+id/action_search"
          android:title="@string/action_bar_search"
          android:icon="@android:drawable/ic_menu_search"
          android:showAsAction="always"
          android:actionViewClass="android.widget.SearchView" />

4) 使用应用的图标作为活动项,代表返回home或者向上等操作
由于活动栏默认情况下,左边是应用的图标,接着是应用标题,我们可以利用它来处理一些经常且关键的操作,默认情况下应用的图标设置ID为android.R.id.home.
如下面的例子,是返回到home.

public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
            case android.R.id.home:
                Intent intent = new Intent(this,ActionBarDemo.class);
                startActivity(intent);
                break;
        }
        return super.onOptionsItemSelected(item);
}

5) 提供标签导航,方便不同的Fragment之间切换
活动栏可以显示标签,允许用户在不同的fragment之间切换。


i.  确定布局中包含有tab关联的fragment的视图;
ii.  创建一个对ActionBar.TabListener的实现,并实现onTabSelected(Tab tab, FragmentTransaction ft), onTabUnselected(), and onTabReselected()方法;
iii.  在setContentView方法之后得到ActionBar,并设置导航模式为NAVIGATION_MODE_TABS.
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

iv.  创建每一个tab为ActionBar,如下
iv-1. Create a new ActionBar.Tab by calling newTab() on the ActionBar.
iv-2. Add title text and/or an icon for the tab by calling setText() and/or setIcon().
iv-3. Declare the ActionBar.TabListener to use for the tab by passing an instance of your implementation to setTabListener(). 
v. Add each ActionBar.Tab to the Action Bar by calling addTab() on the ActionBar and passing the ActionBar.Tab.

Fragment artistsFragment = new ArtistsFragment();
actionBar.addTab(actionBar.newTab().setText(R.string.tab_artists).setTabListener(new TabListener(artistsFragment)));

6) 提供下拉导航功能
i. 利用下拉选择项和布局,构建SpinnerAdapter。

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

ii.  实现ActionBar.OnNavigationListener,来记录用户选择list中项目的行为。
public boolean onNavigationItemSelected(int position, long itemId)

iii. 设置导航模式为ActionBar.NAVIGATION_MODE_LIST

ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

iv. 设置回调函数setListNavigationCallbacks()

actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationCallback);

7) 定制活动栏
i. setBackgroundDrawable (Drawable d),the drawable should be Nine-patch image, a shape, or a solid color, so the system can resize the drawable based on the size of the Action Bar (you should not use a fixed-size bitmap image).
ii. setDisplayUseLogoEnabled (boolean useLogo),由于应用的logo含有更多的信息,是否用应用的logo替换应用的图标
iii. The Action Bar has two standard themes, "dark" and "light". The dark theme is applied with the default holographic theme, as specified by the Theme.Holo theme.
iv. android:actionBarTabStyle( Style for tabs in the Action Bar)
v. android:actionBarTabBarStyle(Style for the bar that appears below tabs in the Action Bar)
vi. android:actionBarTabTextStyle(Style for the text in the tabs)
vii. android:actionDropDownStyle(Style for the drop-down list used for the overflow menu and drop-down navigation)
viii. android:actionButtonStyle(Style for the background image used for buttons in the Action Bar)

4. 总结:

1) 在屏幕或应用上,关键,操作频繁的动作,可以放到活动栏;
2) 帮助传达动作或位置信息的图标;
3) 用logo或者暗示性的图标作为home或者up等操作;

本文转自:http://zwkufo.blog.163.com/blog/static/2588251201132805532568/

Android3.0中ActionBar的新特性的更多相关文章

  1. Jdk5.0中出现的新特性

    掌握jdk5.0中出现的新特性1.泛型(Generics)2.增强的"for"循环(Enhanced For loop)3.自动装箱/自动拆箱(Autoboxing/unboxin ...

  2. C#6.0 中的那些新特性

    C#6.0 中的那些新特性 前言 VS2015在自己机器上确实是装好了,费了老劲了,想来体验一下跨平台的快感,结果被微软狠狠的来了一棒子了,装好了还是没什么用,应该还需要装Xarmain插件,配置一些 ...

  3. C# 9.0中引入的新特性init和record的使用思考

    写在前面 .NET 5.0已经发布,C# 9.0也为我们带来了许多新特性,其中最让我印象深刻的就是init和record type,很多文章已经把这两个新特性讨论的差不多了,本文不再详细讨论,而是通过 ...

  4. VS2015 C#6.0 中的那些新特性(转载)

    自动属性初始化 (Initializers for auto-properties) 以前我们是这么写的 为一个默认值加一个后台字段是不是很不爽,现在我们可以这样写 只读属性的初始化(Getter-o ...

  5. VS2015 C#6.0 中的那些新特性(转自http://www.cnblogs.com/henryzhu/p/new-feature-in-csharp-6.html)

    自动属性初始化 (Initializers for auto-properties) 以前我们是这么写的 为一个默认值加一个后台字段是不是很不爽,现在我们可以这样写 只读属性的初始化(Getter-o ...

  6. C#6.0中10大新特性的应用和总结

    微软发布C#6.0.VS2015等系列产品也有一段时间了,但是网上的教程却不多,这里真对C#6.0给大家做了一些示例,分享给大家.   微软于2015年7月21日发布了Visual Studio 20 ...

  7. VS2015 C#6.0 中的那些新特性

    本人个人博客原文链接地址为http://aehyok.com/Blog/Detail/66.html. 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok ...

  8. iOS中的项目新特性页面的处理

    一般项目中都会出现新特性页面,比如第一次使用应用的时候,或者在应用设置里查看新特性的时候会出现. 这里,选择新建一个专门处理项目新特性的控制器,来完成功能. 首先是 NewFeaturesViewCo ...

  9. Android 5.0(棒棒糖))十大新特性

    Android 5.0(棒棒糖))十大新特性 1. 全新Material Design设计风格 Android Lollipop全新的设计语言是受到了多种因素影响,是一种大胆的平面化创新.换句话说,谷 ...

随机推荐

  1. 目前IT行业的几个大方向

    我简单总结了一下目前it行业的8大方向:   1.嵌入式开发 传统的arm linux开发.新兴的智能硬件.物联网等技术的发展,都让整个方向成为热门领域.   2.游戏开发 cocos2d-x.uni ...

  2. 关于静态库和动态库的理解(C++)

    库的存在,是软件模块化的基础. 库存在的意义: } 库是别人写好的现有的,成熟的,可以复用的代码,你可以使用但要记得遵守许可协议.      } 现实中每个程序都要依赖很多基础的底层库,不可能每个人的 ...

  3. JavaScript中的运算符种类及其规则介绍

    JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScri ...

  4. 推荐一个优秀的前端框架——Bootstrap

    Bootstrap是Twitter推出的一个开源的用于前端开发的工具包.它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架.Bootstra ...

  5. Python操作Excel——win32com模块和xlrd+xlwt+xlutils组合

    今天,接到一个任务,要生成大约两百个excel文件,从2006年到2013年,每个月两个文件,这些文件中除了几个关于日期的单元格不同外,其他数据都相同,所以就想到可以用python写一个小脚本,自动生 ...

  6. JavaScript trim 实现(去除字符串首尾指定字符)

    String.prototype.trim = function (char, type) { if (char) { if (type == 'left') { return this.replac ...

  7. 【转载】Java 升级到jdk7后DbVisualizer 6 启动空指针的处理方案

    将JDK从6升级到了7(或从其他电脑移植DBV文件夹后),每当启动DbVisualizer 6的时候都会报空指针异常 在官网上找到了相关的方案,如下: In the DbVisualizer inst ...

  8. Command-line tools can be 235x faster than your Hadoop cluster

    原文链接:http://aadrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html Introduc ...

  9. ASP.NET Application_Error错误日志写入

    一个web项目开发已完成,测试也通过,但是,bug是测不完的,特别是在一个大的网络环境下.那么,我们就应该记录这些错误,然后改正.这里,我的出错管理页面是在global.asax里面的,利用里面的Ap ...

  10. 使用CURL出现certificate verify failed错误的解决方法

    今天使用CURL访问微信平台接口时遇到一个错误,返回错误代码如下: ? 1 2 SSL certificate problem, verify that the CA cert is OK. Deta ...