http://blog.csdn.net/xyz_lmn/article/details/12623609

每一位Android开发者对Action Bar这种设计都不陌生了,毕竟它已经发布了至少两年了。Android团队发布Action Bar设计规范时同时放出了ActionBar的Api来支持这种设计。如果对ActionBar不太熟悉的可以参考《

Android UI开发第二十四篇——Action Bar》。ActionBar的API被添加在Android3.0(API 级别 11)中,低版本的还是用不了,根本不能适配支持Android 2.X系列的应用。很幸运有第三方开源的actionbarsherlock支持使得Android 2.1以上的Android应用使用actionbarsherlock定义的Action Bar。这里我们不介绍actionbarsherlock怎么使用,我们介绍一种更新的官方支持的AppCompat 使得Android2.1以上的版本可以实现Action Bar。

    

Google I/O 2013中AppCompat实现的Action Bar效果

AppCompat在最新的API 18的Android Support Library中。使用AppCompat需要以库的形式引入到应用中,AppCompat在<sdk>/extras/android/support/v7/appcompat/ 的位置,需要自行下载,或者升级SDK。

如果应用是使用actionbarsherlock实现的Action Bar,也不必刻意的改成AppCompat。因为actionbarsherlock是一个很稳定的经过很多开发者验证的开发库。

[html] view plaincopyprint?
  1. ActionBarSherlock is a solid and well-tested library which has served developers very well for a long time.
  2. If you are already using it and do not currently require any of the above then there is no need to migrate.

1)导入AppCompat库

使用AppCompat第一步需要导入AppCompat库,这一步就不做详细介绍了。

2)修改 android:theme

每个使用Action Bar的Activity都应该添加Android:theme

[html] view plaincopyprint?
  1. <activity
  2. ...
  3. android:theme="@style/Theme.AppCompat" />

或者修改application

[html] view plaincopyprint?
  1. <application
  2. android:label="@string/app_name"
  3. android:icon="@drawable/ic_launcher"
  4. android:theme="@style/Theme.AppCompat"
  5. android:allowBackup="true">

3)Activity要继承自ActionBarActivity

实现Action Bar的视图需要继承ActionBarActivity。

4)修改menu的命名空间

[html] view plaincopyprint?
  1. <menu xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:holo="http://schemas.android.com/apk/res-auto" >
  3. <item
  4. android:id="@+id/action_websearch"
  5. android:icon="@drawable/action_search"
  6. android:title="@string/action_websearch"
  7. holo:showAsAction="never"/>
  8. </menu>

要特别注意的是,通过XML文件来实现Action Item,一定要自定义命名空间,而且该命名空间的后缀一定要和item中showAsAction的前缀一致,本例中为“holo”

显示Menu需要重写onCreateOptionsMenu方法:

[java] view plaincopyprint?
  1. @Override
  2. public boolean onCreateOptionsMenu(Menu menu) {
  3. MenuInflater inflater = getMenuInflater();
  4. inflater.inflate(R.menu.main, menu);
  5. return super.onCreateOptionsMenu(menu);
  6. }

对Menu的item事件处理需要重写onOptionsItemSelected方法。

[java] view plaincopyprint?
  1. @Override
  2. public boolean onOptionsItemSelected(MenuItem item) {
  3. // The action bar home/up action should open or close the drawer.
  4. // ActionBarDrawerToggle will take care of this.
  5. if (mDrawerToggle.onOptionsItemSelected(item)) {
  6. return true;
  7. }
  8. // Handle action buttons
  9. switch(item.getItemId()) {
  10. case R.id.action_websearch:
  11. // create intent to perform web search for this planet
  12. Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
  13. intent.putExtra(SearchManager.QUERY, getSupportActionBar().getTitle());
  14. // catch event that there's no activity to handle intent
  15. if (intent.resolveActivity(getPackageManager()) != null) {
  16. startActivity(intent);
  17. } else {
  18. Toast.makeText(this, R.string.app_not_available, Toast.LENGTH_LONG).show();
  19. }
  20. return true;
  21. default:
  22. return super.onOptionsItemSelected(item);
  23. }
  24. }

上面就是简单的通过Appcompat实现Action Bar,想自定义各种属性请参考官方文档。

demo下载:demo

/**
* @author 张兴业
*  http://blog.csdn.net/xyz_lmn
*  iOS入门群:83702688
*  android开发进阶群:241395671
*  我的新浪微博:@张兴业TBOW
*/

参考:

http://antonioleiva.com/actionbarcompat-how-to-use/

http://antonioleiva.com/actionbarcompat-action-views/

http://android-developers.blogspot.com/2013/08/actionbarcompat-and-io-2013-app-source.html

Android UI开发——AppCompat实现Action Bar相关推荐

  1. Android UI开发第二十五篇——分享一篇自定义的 Action Bar

    Action Bar是android3.0以后才引入的,主要是替代3.0以前的menu和tittle bar.在3.0之前是不能使用Action Bar功能的.这里引入了自定义的Action Bar, ...

  2. Android UI开发第三十九篇——Tab界面实现汇总及比较

    Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇--ActivityGroup实现tab功能>.这 ...

  3. Android 开发 -- 开发第一个安卓程序、Android UI开发(布局的创建:相对布局和线性布局、控件单位:px pt dp sp、常用控件 、常见对话框、ListView)

    文章目录 1. 开发第一个Hello World程序 1.1 开发程序 1.2 认识程序中的文件 1.3 Android程序结构 1.4 安卓程序打包 2. Android UI开发 2.1 布局的创 ...

  4. Android UI开发第三十篇——使用Fragment构建灵活的桌面

    http://www.lupaworld.com/article-222973-1.html 当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括4寸屏.7寸屏. 10寸屏等等,Android ...

  5. Android UI开发第四十一篇——墨迹天气3.0引导界面及动画实现

    周末升级了墨迹天气,看着引导界面做的不错,模仿一下,可能与原作者的代码实现不一样,但是实现的效果还是差不多的.先分享一篇以前的文章,android动画的基础知识,<Android UI开发第十二 ...

  6. 【Android -- UI开发】一份 UI 开发学习指南

    思维导图 推荐资料:官方文档 六大布局 网上有人比喻的很好:布局好比是建筑里的框架,组件按照布局的要求依次排列,就组成了用于看见的漂亮界面了. 请看文章:[Android – UI 开发]六大布局 U ...

  7. Android UI开发第三十二篇——Creating a Navigation Drawer

    Navigation Drawer是从屏幕的左侧滑出,显示应用导航的视图.官方是这样定义的: The navigation drawer is a panel that displays the ap ...

  8. Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)

    本文内容: 1.横向ListView的所有实现思路; 2.其中一个最通用的思路HorizontalListView,并基于横向ListView开发一个简单的相册: 3.实现的横向ListView在点击 ...

  9. Android UI开发详解之ActionBar .

    在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果. 一.添加A ...

最新文章

  1. 《数学之美》第10章 PageRank--Google的民主表决网页排名技术
  2. C语言 数字翻转输出
  3. Java国家/地区使用限制条款引发争议
  4. Spark ML - 聚类算法
  5. asterisk 扩展应用(3)——IVR 实现
  6. java游戏运行环境_Java运行环境
  7. 微信sdk 隐藏右上角菜单项
  8. 项目经理如何确保工程质量
  9. Android中使用Intent进行窗体切换,并且传值和自定义类的对象详解
  10. JS的一些时间获取和计算公用方法封装
  11. inDesign教程,如何创建、修改和使用母版页?
  12. 30分钟学会用scikit-learn的基本回归方法(线性、决策树、SVM、KNN)和集成方法(随机森林,Adaboost和GBRT)
  13. 【水果识别】基于matlab GUI形态学水果识别(含识别率)【含Matlab源码 907期】
  14. 【TWVRP】基于matlab遗传算法求解带时间窗的车辆路径问题【含Matlab源码 002期】
  15. YS13-3荧光管时钟设计
  16. 控制/ 状态寄存器(RCC_CSR) 复位
  17. 为什么总是感觉压力很大?应该怎么办?
  18. 阴阳师手游如何用云手机无限多开换IP防封
  19. 太可怕啦!AI 一秒还原马赛克,有码变高清
  20. 借助CatGPT让turtlesim小乌龟画曲线

热门文章

  1. HDU 6085 Rikka with Candies (暴力压位)
  2. 【动态ppt制作软件】Focusky教程 | 设置预加载信息
  3. 计算机软件系统第一课时教案,第一章  信息与信息技术教案
  4. Win10自动更新怎么永久关闭?服务、注册表、组策略、计划任务中全方位设置,永久解决!
  5. win10下elk6.0安装运行(解决Servcie不是内部或外部命令的问题)
  6. 2016天天飞车服务器维护,天天飞车为什么关服?关服原因及补偿奖励一览
  7. Siemens Simatic PCS 7.5 version 9.1
  8. 随手记录JAVA微信扫码支付模式二功能
  9. “聪明车”接驳“智慧路”—— 智能网联车驶上新赛道
  10. 80端口封了怎么办,80端口被屏蔽解决方法