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。。。未完待续