概述:

在Honeycomb版本系统中,Android引入了全新的操作栏。操作栏不仅取代了显示标题和应用图标的传统标题栏(title bar),还带来了更多其他的功能,例如,安置菜单选项、配置应用图标作为导航按钮,等等。——《Android编程权威指南》

优点:

1.使用方便,避免开发者重复制造轮子。

2.框架成熟,不需要开发者再去做多余的适配不同分辨率及碎片化优化操作。

正常使用(API14及以上):

代码及思路分析:

正常情况下的我们是通过Java代码和xml代码组合来编写actionbar。

xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:id="@+id/action_compose"android:icon="@drawable/delete_button_normal"android:showAsAction="always"android:title="@string/action_compose"/><itemandroid:id="@+id/action_delete"android:icon="@drawable/delete_button_normal"android:showAsAction="always"android:title="@string/action_delete"/><itemandroid:id="@+id/action_settings"android:icon="@drawable/delete_button_normal"android:showAsAction="always"android:title="@string/action_settings"/></menu>

定义3个item,设置其showAsAction属性为always.

关于showAsAction属性的值有以下几个:

always:    这个值会使菜单项一直显示在Action Bar上
ifRoom:    如果有足够的空间,这个值会使菜单项显示在Action Bar上
never:     这个值使菜单项永远都不出现在Action Bar上
withText:  这个值使菜单项和它的图标,菜单文本一起显示

看到上面的标签为menu,就应该知道了,到上面在java代码中是通过菜单来实现了。主要的方法是onCreateOptionsMenu,如下:

public boolean onCreateOptionsMenu(Menu menu) {MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.menu, menu);return true;}

为了去响应左边的返回键(箭头)和Home需要我们在代码做以下逻辑:

ActionBar bar = getActionBar();
bar.setHomeButtonEnabled(true);
bar.setDisplayHomeAsUpEnabled(false);
bar.setDisplayShowHomeEnabled(true);

还有一点就是Home的图标,我们可以在manifest的activity标签中去设置,如下:

<activityandroid:name="com.actionbar.activity.MainActivity"android:label="@string/action_bar_title"android:logo="@drawable/back_button_normal" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>

实现效果展示:

注:有时候我们在屏幕足够大的时候还是会在最左侧出现一个小箭头,那么如何除掉Actionbar最左侧的箭头呢?可以点击这里查看解决方法。

适配2.x版本:

代码及思路分析:

对于上面的逻辑方法只是可以在API 14及以上的系统上实现。那么API 14以下的系统要怎么去实现同样的效果呢?在官方出台新的解决方案之前,就有一些大神开始研究且开发出了一套框架——ActionBarSherlock。当然目前Google已经就这个问题提供了一个新的解决方案——android-support-v7-appcompat。我们可以让我们的Activity继承自ActionBarActivity,不过不担心这个ActionBarActivity会对代码有没有什么不良的影响,因为它是继承自FragmentActivity。

那么要怎么实现呢?我们需要引入一个工具包:android-support-v7-appcompat,并在Android的项目中导入它。是不是到这里就已经大功告成了呢?运行程序后,我们发现并非如此。可是,在基有的代码上我们没有发现任何蛛丝马迹,那我们要怎么去修改这个Bug呢?google吧,孩子。

后来我们发现我们不能再使用静态的xml代码来创建它了。我们只能动态的在Java代码中通过Java代码动态生成Item,如下:

public boolean onCreateOptionsMenu(Menu menu) {
//      MenuInflater inflater = getMenuInflater();
//      inflater.inflate(R.menu.menu, menu);
//      return super.onCreateOptionsMenu(menu);MenuCompat.setShowAsAction(menu.add("First").setIcon(android.R.drawable.btn_star), MenuItemCompat.SHOW_AS_ACTION_ALWAYS);MenuCompat.setShowAsAction(menu.add("Second").setIcon(android.R.drawable.ic_menu_rotate), MenuItemCompat.SHOW_AS_ACTION_ALWAYS);return true;}

注释掉的部分就是通过xml静态地创建,事实证明是失败的,需要动态来创建。

运行效果图展示:

本人文笔拙劣,可能会有一些表述不够清晰。更详细的代码和细节请在下面的源码连接中去下载查看。还有一点需要注意,如果你的测试机是魅族系列,可能有些地方不能很好适配,请更换测试机重新测试或将属性参数改为SHOW_AS_ACTION_ALWAYS(我用的也是魅族)。

源码下载:

http://download.csdn.net/detail/u013761665/8737119

Android控件ActionBar浅析及适配2.x的方法介绍相关推荐

  1. Android 控件 RecyclerView 看这篇就够了

    [Android 控件 RecyclerView] 概述 RecyclerView是什么 从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传 ...

  2. Android 控件 RecyclerView

    [Android 控件 RecyclerView] 概述 RecyclerView是什么 从Android 5.0开始,谷歌公司推出了一个用于大量数据展示的新控件RecylerView,可以用来代替传 ...

  3. android让一个控件跟上面控件对其,学个明白--Android控件架构

    Android控件架构 1.什么是View? View是Android中所有控件的基类.View是界面层的控件的一种抽象,它代表了一个控件.在Android中每个控件都会在界面中占得一块矩形的区域.在 ...

  4. 自定义控件android.r,Android控件架构与自定义控件

    前言 最近在开发的路上越走越远了,每天在看各位大神公众号更新内容是自定义View的时候,一些小的内容有点模具,决定回过头来温习一下过往的内容.此篇也是根据android群英传来总结的一篇文章. 1 A ...

  5. Android群英传笔记——第三章:Android控件架构与自定义控件讲解

    Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...

  6. Android控件架构与自定义控件

    引言 最近在开发的路上越走越远了,每天在看各位大神公众号更新内容是自定义View的时候,一些小的内容有点模具,决定回过头来温习一下过往的内容.此篇也是根据android群英传来总结的一篇文章. 1 A ...

  7. Android控件点击圆形阴影反馈解决方案

    Android控件点击圆形阴影反馈解决方案 愿景 对于手机App而言,没有反馈效果的按钮使用体验是不舒服的.最近在深入学习Material Design,对其中的ripple效果比较感兴趣.我想着尝试 ...

  8. 【079】用代码来创建 Android 控件

    一般来说我们在创建控件的时候都是在 XML 文件中完成的, 实施起来还是蛮方便的, 而且修改起来也可以很快的看见效果, 但是有一个很大的劣势就是没办法动态的创建控件, 举个例子, 例如我从数据库中取出 ...

  9. Android 控件架构及View、ViewGroup的测量

    附录:示例代码地址 控件在Android开发的过程中是必不可少的,无论是我们在使用系统控件还是自定义的控件.下面我们将讲解一下Android的控件架构,以及如何实现自定义控件. 1.Android控件 ...

最新文章

  1. 吐血推荐:win下如何安装tensorflow?只需两步!!
  2. c#_Math.Sign()
  3. Linux常用的基本命令head、tail、tar、grep、date、cal(二)
  4. python grep 列表_关于python:跨多个文档的字符串搜索 – grep?
  5. LVS、Nginx 及 HAProxy 工作原理
  6. 数模笔记_多变量最优化计算之随机搜索算法及建模案例
  7. tomcat截取日志_Tomcat的日志分割三种方法
  8. 服务器选购seo优化规则,需要做SEO的网站,购买服务器请注意六点
  9. 阿里云centos7使用yum安装mysql的正确姿势
  10. 转帖一则——从医学角度论成熟
  11. 清除eclipse当前登录的SVN账户
  12. python中list最大值_【Python实践-5】使用迭代查找一个list中最小和最大值
  13. (3) numpy数组保留小数位数
  14. IE8 证书错误,导航已阻止,解决方法(selenium)
  15. 买游戏来运营_游戏化思维帮你玩转社群运营
  16. 基于规则的中文分词 - NLP中文篇
  17. linux nuc 吗 支持_当NUC遇上本地衍生版Linux
  18. 微信公众平台开发 模版消息
  19. MATLAB用imshow画图时更改和显示坐标轴
  20. 如何确定自己浏览器的User-Agent信息

热门文章

  1. 以太坊节点布置(3) 启动geth客户端
  2. 编译Bitcoin BCH configure: error: libdb_cxx headers missing ,终于解决了
  3. 部署 JSP 工程文件
  4. 【AI出牌器】第一次见这么“刺激”的斗地主,胜率高的关键因素竟是......
  5. Linux kernel crypto的介绍
  6. [ATF]-TEE/REE系统切换时ATF的寄存器的保存和恢复
  7. python里graphics的使用_使用graphics.py实现2048小游戏
  8. VC6程序申请管理员权限
  9. MySQL LIMIT:限制查询结果的记录条数
  10. 【PHP】创建文件并写入内容