Android ActionBar 使用详解
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 使用详解的更多相关文章
- 【Android UI设计与开发】8.顶部标题栏(一)ActionBar 奥义·详解
一.ActionBar介绍 在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个非常重要的交互元素,Action Bar取代了传统的tittle bar和men ...
- 【Android UI设计与开发】8.顶部标题栏(一)ActionBar 奥义·详解
一.ActionBar介绍 在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个非常重要的交互元素,Action Bar取代了传统的tittle bar和men ...
- android:ToolBar详解
android:ToolBar详解(手把手教程) 泡在网上的日子 发表于 2014-11-18 12:49 第 124857 次阅读 ToolBar 42 来源 http://blog.mosil.b ...
- Android之canvas详解
首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, y ...
- 【转】Android Canvas绘图详解(图文)
转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android Canvas绘图详解(图文) 泡 ...
- Android 核心分析 之八Android 启动过程详解
Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...
- Android GLSurfaceView用法详解(二)
输入如何处理 若是开发一个交互型的应用(如游戏),通常需要子类化 GLSurfaceView,由此可以获取输入事件.下面有个例子: java代码: package eoe.ClearTes ...
- Android编译过程详解(一)
Android编译过程详解(一) 注:本文转载自Android编译过程详解(一):http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359 ...
- android屏幕适配详解
android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...
随机推荐
- sql异常 获取数据失败的原因及解决方案
使用dbutils工具类时 不能使用char作为sql的字段类型 报错提示不能转换 所以替换成别的(一般是String)即可
- QT在子窗口外单击关闭子窗口
网上查到了好多种方法,1.添加过滤器(eventFilter),2.重写鼠标单击事件,这两种方法都要判断鼠标单击位置是不是在子窗口上.而且在可编辑控件上如(下拉框.文本编辑框等),父窗口会直接传递到可 ...
- manjaro i3下 dmenu terminal 和 terminal_hold 打开方式记录
分别用type为terminal 和 terminal_hold 打开eclipse 用terminal_hold打开,终端和界面分左右显示 用terminal打开,终端和界面分上下显示 除了排列方式 ...
- Spark入门(Python)
Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到”大数据(Big Data)”广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰富生态系统,允许使用 ...
- 利用box-shadow制作loading图
我们见过很多利用css3做的loading图,像下面这种应该是很常见的.通常制作这种loading,我们会一个标签对应一个圆,八个圆就要八个标签.但是这种做法很浪费资源.我们可以只用一个标签,然后利用 ...
- 软件工程-东北师大站-第四次作业PSP
1.本周PSP 2.本周进度条 3.本周累计进度图 代码累计折线图 博文字数累计折线图 4.本周PSP饼状图
- 5月5号周二课堂练习:简评cnblogs.com的用户体验
一.用户类型 在博客园上写博客,提问题,浏览感兴趣的博客帖子的活跃用户. 二.对cnblogs的期望 在博客园上写博客更流畅,制作手机版的APP可以随时随地在线浏览大牛们写的博客,提出的问题能更好的更 ...
- a6
组员:陈锦谋 今日内容: 界面按钮.icon制作,PS学习 明日计划: 继续 困难: 时间不多吧,今天主要电气实践
- Nginx 配置站点
1-进入 配置文件夹 cd /etc/nginx/cof.d 2-创建一个一站点名称命名的配置文件 vim kestrel-syslyracom.conf 3-在.conf 文件中输入 ...
- lintcode-422-最后一个单词的长度
422-最后一个单词的长度 给定一个字符串, 包含大小写字母.空格' ',请返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 注意事项 一个单词的界定是,由字母组成,但不包含任何的空 ...