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个取值;
注:它们之间可以配合使用;
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