ActionBar取代了以前的TitleBar,是一种更加灵活的人机交互方式;
ActionBar并不是完全自立门户的一个新兴的东西,而是和3.0以下版本的menu进行了合并整合;
so,添加actionbar的方式肯定和添加menu方式类似;

1.常见普通ActionBar
先来看一个menu的xml配置

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

    <item
android:id="@+id/action_settings"
android:showAsAction="always|collapseActionView"
android:title="settings"/>
</menu>

其中,showAsAction是一个枚举类型的值,有5个取值;

  • never:不显示在actionBar上,只有通过menu菜单才能呼出此菜单项;
  • ifroom:如果actionBar上有足够的空间则显示;
  • always:总是显示;
  • collapseActionView:为了解决空间的问题,收缩ActionView;
  • withText:显示文字;

注:它们之间可以配合使用;

2.上下分开的独立的ActionBar
实现这样的功能其实只需要一句代码:

android:uiOptions="splitActionBarWhenNarrow"

将这段代码放置到清单配置文件的对应的activity里面即可

3.可扩展的ActionBar(搜索框)

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_query"
android:actionLayout="@layout/al"
android:showAsAction="always|collapseActionView"
android:title="query"/>
</menu>

al.xml

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</EditText>

注意在menuitem里面配置的android:actionLayout属性,他代表当点击item的时候需要显示的view;也可通过android:actionViewClass属性指定;
这里再介绍几个相关的方法
》》监听actionView的展开与关闭事件

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
for (int i = 0; i < menu.size(); i++) {
menu.getItem(i).setOnActionExpandListener(
new OnActionExpandListener() { @Override
public boolean onMenuItemActionExpand(MenuItem arg0) {
Log.e("tag", "onMenuItemActionExpand");
return true;
} @Override
public boolean onMenuItemActionCollapse(MenuItem arg0) {
Log.e("tag", "onMenuItemActionCollapse");
return true;
}
});
}
return super.onCreateOptionsMenu(menu);
}

4.Tab样式ActionBar

添加实现代码

    @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tab);
mActionBar = getActionBar();
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mActionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME);
ActionBar.Tab tabA = mActionBar.newTab().setText("ATab");
ActionBar.Tab tabB = mActionBar.newTab().setText("BTab");
tabA.setTabListener(new MyTabsListener(new AFragment()));
tabB.setTabListener(new MyTabsListener(new BFragment()));
mActionBar.addTab(tabA, 0);
mActionBar.addTab(tabB, 1);
mActionBar.setSelectedNavigationItem(1);
}

MyTabsListener.java(监听tab)改变事件

    protected class MyTabsListener implements ActionBar.TabListener {
private Fragment frag; public MyTabsListener(Fragment frag) {
super();
this.frag = frag;
} @Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(R.id.framel, frag);
} @Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
} @Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}

5.ActionMode
还有一种很常见的ActionBar,就是选择了一些数据之后(如一下列表中的某些项,删除等动作),弹出ActionBar让用户选择需要的操作;

            ActionMode am = startActionMode(new Callback() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
Log.e("tag", "onPrepareActionMode");
menu.findItem(R.id.action_settings).setVisible(false);
return true;
} @Override
public void onDestroyActionMode(ActionMode mode) {
Log.e("tag", "onDestroyActionMode");
} @Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
Log.e("tag", "onCreateActionMode");
getMenuInflater().inflate(R.menu.menu1, menu);
return true;
} @Override
public boolean onActionItemClicked(ActionMode mode,
MenuItem item) {
Log.e("tag", "onActionItemClicked");
if (item.getItemId() == R.id.action_settings1) {
am.finish();
}
return false;
}
});

在onPrepareActionMode中,我们也可以根据需要控制菜单项的显示;其它的一些点击事件等等和前面讲的ActionBar的操作相同;
这里需要注意的是ActionMode在finish之后,不能再次调用,否则会引发异常;

6。。。未完待续

http://blog.csdn.net/liu149339750/article/details/8282471

Android ActionBar 使用详解的更多相关文章

  1. 【Android UI设计与开发】8.顶部标题栏(一)ActionBar 奥义·详解

    一.ActionBar介绍 在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个非常重要的交互元素,Action Bar取代了传统的tittle bar和men ...

  2. 【Android UI设计与开发】8.顶部标题栏(一)ActionBar 奥义·详解

    一.ActionBar介绍 在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个非常重要的交互元素,Action Bar取代了传统的tittle bar和men ...

  3. android:ToolBar详解

    android:ToolBar详解(手把手教程) 泡在网上的日子 发表于 2014-11-18 12:49 第 124857 次阅读 ToolBar 42 来源 http://blog.mosil.b ...

  4. Android之canvas详解

    首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, y ...

  5. 【转】Android Canvas绘图详解(图文)

    转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android Canvas绘图详解(图文) 泡 ...

  6. Android 核心分析 之八Android 启动过程详解

    Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...

  7. Android GLSurfaceView用法详解(二)

    输入如何处理       若是开发一个交互型的应用(如游戏),通常需要子类化 GLSurfaceView,由此可以获取输入事件.下面有个例子: java代码: package eoe.ClearTes ...

  8. Android编译过程详解(一)

    Android编译过程详解(一) 注:本文转载自Android编译过程详解(一):http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359 ...

  9. android屏幕适配详解

    android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...

随机推荐

  1. The specified value "2019-1-2" does not conform to the required format, "yyyy-MM-dd"

    问题: 在cshtml中转换的日期格式错误,前端报错:The specified value "2019-1-2" does not conform to the required ...

  2. NO.08--VUE之自定义组件添加原生事件

    前几篇给大家分享了我的业余的“薅羊毛”的经历,回归正题,讲回vue吧: 许多vue新手在工作开发中会遇到一个问题,直接使用 button 添加原生事件是没有问题的,但是使用自定义组件添加原生事件时,就 ...

  3. Nginx内容缓存

    本节介绍如何启用和配置从代理服务器接收的响应的缓存.主要涉及以下内容 - 缓存介绍 启用响应缓存 涉及缓存的NGINX进程 指定要缓存的请求 限制或绕过缓存 从缓存中清除内容 配置缓存清除 发送清除命 ...

  4. spark读取外部配置文件的方法

    spark读取外部配置文件的方法 spark-submit  --files /tmp/fileName /tmp/test.jar 使用spark提交时使用--files参数,spark会将将本地的 ...

  5. phpldapadmin具体设置

    一.需求    1.属性隐藏 只显示用户名,部门(因为是单OU设计为了做区分),登录密码 2.属性顺序显示 部门>用户名>登录密码 3.使用UID可以登陆 用户可以使用账户(自己的名字)登 ...

  6. DOM---文档对象模型(Document Object Model)的基本使用

    一.DOM简介 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口.它是一种与平台和语言无关的应用程序接口(API),它可以动态 ...

  7. less 语法特性翻译稿 - 特性快速预览部分

    原文地址 http://lesscss.cn/features/ 概述 作为CSS的一种扩展语法,Less不仅仅向后兼容CSS,新的特性也是基于CSS现有语法.这使得学习Less变得容易,如果你有所怀 ...

  8. .NET 4.0 Tuple 元组

    Tuple是.NET 4.0的新特性,主要功能是动态返回数据结构,也可以用做临时数据结构. 原来做一些功能时需要一个方法返回几个值,有两种方法: 1. 非常难看.难用的OUT参数: 2. 新写一个实体 ...

  9. hashlib模块使用详情

    python常用模块目录 一:hashlib简介 1.什么叫hash:hash是一种算法(不同的hash算法只是复杂度不一样)(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224 ...

  10. c++ Dynamic Memory (part 2)

    Don't use get to initialize or assign another smart pointer. The code that use the return from get c ...