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. 向大学说拜拜——大学 > 兴趣 + 时间 + 思考 + 实践

    [人物素描] 大学期间,担任过班委,加入过学生会,参加过社团,拿过奖学金......而印象最深刻的莫过于参加并组织过ACM集训,以及参加过导师的国家自然科学基金项目了.毕业时顺利拿到一波offer,并 ...

  2. javaweb(十九)——JSP标签

    一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...

  3. Django——test文件编写接口测试

    用自己建立的小网页来做接口测试,在Django的tests.py写下如下 test_login_page为用get方式登录login路径,根据回复验证是否查看到页面 test_login_action ...

  4. Python中abs()和math.fabs()区别

    描述:Python中fabs(x)方法返回x的绝对值.虽然类似于abs()函数,但是两个函数之间存在以下差异: abs()是一个内置函数,而fabs()在math模块中定义的. fabs()函数只适用 ...

  5. 2018百度之星开发者大赛-paddlepaddle学习

    前言 本次比赛赛题是进行人流密度的估计,因为之前看过很多人体姿态估计和目标检测的论文,隐约感觉到可以用到这次比赛上来,所以趁着现在时间比较多,赶紧报名参加了一下比赛,比赛规定用paddlepaddle ...

  6. Spring学习(3):Spring架构(转载)

    1. Spring架构图 核心容器:包括Core.Beans.Context.EL模块. ●Core模块:封装了框架依赖的最底层部分,包括资源访问.类型转换及一些常用工具类. ●Beans模块:提供了 ...

  7. CsvHelper文档-5配置

    CsvHelper文档-5配置 CsvHelper库被设计成快速且简单易用,但是有时候默认的是设置不符合要求,需要你自己改变一些东西.所以csvHelper内置了很多自定义设置选项来改变读写行为.特别 ...

  8. Tensorflow - Implement for a Convolutional Neural Network on MNIST.

    Coding according to TensorFlow 官方文档中文版 中文注释源于:tf.truncated_normal与tf.random_normal TF-卷积函数 tf.nn.con ...

  9. 每日scrum--No.1

    Yesterday:无 Today: 查找学校的官方地图和亲自测试其准确性 Problem :不能使地图适应我们的软件;未解决地图上存在的问题: 明天继续加油.

  10. 软工1816 · Alpha冲刺(7/10)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 学会了POSTMAN的使用,对后端已经完成的接口进行了收发消息正确性的验证 推 ...