以下示例为API<11,因为API>=11时本来就有ActionBar可以使用,所以不猜讨论范围之内

今天Google发布了最新的API 18,包括众多新的性能,正好最近在研究ActionBarSherlock,看到最新的Support V7包也开始支持ActionBar了,就研究了一下使用方法,我把自己今天研究到的一个使用方法记录如下,希望可以抛砖引玉吧.

1. 导入Support V7的包.更新SDK 18以后,会发现在 \android-sdk\extras\android\support\v7目录下有三个子文件夹,分别是:appcompat\gridlayout\mediarouter,工作中比较常用的是appcompat,所以今天也只看了这个目录下的android-support-v7-appcompat.jar.把这个文件导入到工程中.

2.在manifest文件中,为你使用了ActionBar的actitity添加theme属性,这个theme必须是 @style/Theme.AppCompat ,@style/Theme.AppCompat.Light.,@style/Theme.AppCompat.Light.DarkActionBar,三种中的一种,我偷懒了,直接在application节点中加了theme.

3.在res/menu目录下,写一个xml文件。官方推荐每一个item项都要有icon和title图标,因为系统默认显示的是图标,而且当屏幕空间不够的时候,未显示的菜单就会隐藏到列表中,而列表中只能显示title字段的值。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
android:id="@+id/action_search"
android:icon="@drawable/left"
android:title="search"/>
<item
android:id="@+id/action_compose"
android:icon="@drawable/right"
android:title="compose"/> </menu>

4.实现Activity,让它继承ActionBarActivity.在onCreateOptionsMenu()方法中,获取到每一个MenuItem,之后为每一个MenuItem调用MenuItemCompat.setShowAsAction(MenuItem item, int actionEnum)方法,就可以将菜单项变为ActionBar中的子项了.

actionEnum的值有以下几种:

MenuItemCompat.SHOW_AS_ACTION_ALWAYS (始终显示)

MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW (隐藏列表中显示)

MenuItemCompat.SHOW_AS_ACTION_IF_ROOM (屏幕有空间就显示,没空间就隐藏)

MenuItemCompat.SHOW_AS_ACTION_NEVER (永不显示)

MenuItemCompat.SHOW_AS_ACTION_WITH_TEXT (既显示图标又显示文字)

最后 在方法中要 return true

@Override
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.main, menu); MenuItem menuItem = menu.findItem(R.id.action_search); MenuItem findItem = menu.findItem(R.id.action_compose); MenuItemCompat.setShowAsAction(menuItem, MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
MenuItemCompat.setShowAsAction(findItem, MenuItemCompat.SHOW_AS_ACTION_WITH_TEXT); return true;
}

这样就大功告成了.

项目文件下载地址: http://download.csdn.net/detail/hkg1pek/5816295

Android Support V7 包中 ActionBar的使用的更多相关文章

  1. 转 如何使用V7包中ActionBar(Eclipse版)

    http://blog.csdn.net/appte/article/details/11712591 以前3.0以前的版本要使用ActionBar,必须使用国外大牛写的ActionBarSherlo ...

  2. 如何使用V7包中ActionBar(Eclipse版)

    转自:http://blog.csdn.net/appte/article/details/11712591 以前3.0以前的版本要使用ActionBar,必须使用国外大牛写的ActionBarShe ...

  3. android.support.v4包中的LruCache源码简读

    package android.util; import java.util.LinkedHashMap; import java.util.Map; /** * A cache that holds ...

  4. android 使用android.support.v7 添加ActionBar

    当需要在 android 7或更高的版本使用 ActionBar,则可以通过继承ActionBarActivity来实现, 网上有一个开源项目来兼容老版本显示ActionBar的效果:ActionBa ...

  5. [转]Android 导入v7包常见错误,以及项目引用v7包错误解决

    android下v4    v7   v21等包是android系统的扩展支持包,就想windows的系统补丁一个道理. android的扩展包主要是用来兼容低版本的,比如android3.0以后出现 ...

  6. Android 导入v7包常见错误,以及项目引用v7包错误解决

    android下v4    v7   v21等包是android系统的扩展支持包,就想windows的系统补丁一个道理. android的扩展包主要是用来兼容低版本的,比如android3.0以后出现 ...

  7. 如何使用android-support-V7包中ActionBar(Eclipse版)

    $*********************************************************************************************$ 博主推荐 ...

  8. android.support.v7.app.AppCompatActivity

    1.Android Studio (api 23) 新建项目的时候 Activity public class MainActivity extends AppCompatActivity 2.系统默 ...

  9. 在项目中引用android.support.v7

    在Android开发中,新建的项目可能因为缺少对sopport工程的引用而报错,可以这样解决. 1.项目右键 --> import --> Android --> Existing ...

随机推荐

  1. MFC一个令人纠心的错误

    IDE生成的代码,运行几次之后开始出现以下这个错误 Error: must call SetScrollSizes() or SetScaleToFitSize() before painting s ...

  2. plugin

    http://wicky.nillia.ms/headroom.js/ http://makotot.github.io/sidebar/ http://www.nodebeginner.org/in ...

  3. POJ 3281 牛双选问题

    题目大意:有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有N头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享用到自己喜欢的食物 ...

  4. Delphi 托盘程序实现 转

    unit MainUnit; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, F ...

  5. 一个linux下socket编程的例子,client连server

    关于socket编程,以下文章写得比较好:http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html 1. accept()函 ...

  6. POJ 3669 广度优先搜索

    题意:巨大流星雨即将袭来.每个流星会对击中的地方以及周围(上下左右四格)造成破坏.Bessie开始时位于(0, 0)位置,并希望逃到一处不会被袭击到的地方(在第一象限内).已知每移动一格需要1个时间单 ...

  7. Flask+Mysql搭建网站之安装Mysql

    安装Mysql # sudo apt-get install mysql-server 安装过程需要输入root密码,这个密码是mysql 的root密码,之后连接mysql会用到,这个要记住. 安装 ...

  8. Java高级特性之枚举学习总结

    在Java SE5之前,我们要使用枚举类型时,通常会使用static final 定义一组int常量来标识,代码如下 public static final int MAN = 0; public s ...

  9. mvc系统过滤器

    一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration:缓存的时间,以秒为 ...

  10. 经典C面试题

    12个有趣的C语言面试题 面试题C 摘要:12个C语言面试题,涉及指针.进程.运算.结构体.函数.内存,看看你能做出几个! 1.gets()函数 问:请找出以下代码里的问题: #include< ...