ActionBar是 3.0之后出现的控件,取代 menu,显示在标题栏位置。
通过getActionBar()得到对象。
1.普通ActionBar
创建方式与Menu(xml创建)一样,不过item中需要设定android:showAsAction属性,不设定就是默认never,item将为menu的item,选择always或者ifRoom将为ActionBar。
右上角为ActionBar增加的item。默认不显示title,只有在showAsAction属性中设置了withText属性才会在横屏时显示。
2.Tab类型ActionBar
通过getActionBar()得到ActionBar,接着actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS),再 actionBar.addTab(actionBar.newTab().setText("qqq").setIcon(R.drawable.ic_launcher).setTabListener(this));增加一条Tab。
通过
-
actionBar.setDisplayShowHomeEnabled(false);
-
actionBar.setDisplayShowTitleEnabled(false);
可以去掉标题栏部分:
等价于
-
actionBar.setDisplayOptions(0,ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_SHOW_TITLE );
如果只actionBar.setDisplayShowHomeEnabled(false);标题栏部分的提片将去掉,文字保留,与下面的QQQTabs换位,显示在Tabs与View之间。
3.显示在底部的ActionBar
在AndroidManifest里的Activity加上属性android:uiOptions="splitActionBarWhenNarrow"后,普通ActionBar将不再显示在标题栏部分,而是显示在屏幕底部:
4.对比4.0手机的联系人布局
基本结构一样的。联系人布局是ActionBar+fragment+ViewPager组成的。3个界面间可互相滑动利用了ViewPager,ViewPager的每个界面内容是fragment。
附加一段4.0联系人添加联系人时title部分代码:
-
View customActionBarView = inflater.inflate(R.layout.editor_custom_action_bar,
-
null);
-
View saveMenuItem = customActionBarView.findViewById(R.id.save_menu_item);
-
saveMenuItem.setOnClickListener(new OnClickListener() {
-
@Override
-
public void onClick(View v) {
-
mFragment.onDoneClicked();
-
}
-
});
-
// Show the custom action bar but hide the home icon and title
-
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
-
ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME |
-
ActionBar.DISPLAY_SHOW_TITLE);
-
actionBar.setCustomView(customActionBarView);
-
actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP|ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setDisplayHomeAsUpEnabled(true) // 给左上角图标的左边加上一个返回的图标。对应ActionBar.DISPLAY_HOME_AS_UP
actionBar.setDisplayShowHomeEnabled(true) //使左上角图标可点击,对应id为android.R.id.home,对应ActionBar.DISPLAY_SHOW_HOME
actionBar.setDisplayShowCustomEnabled(true) // 使自定义的普通View能在title栏显示,即actionBar.setCustomView能起作用,对应ActionBar.DISPLAY_SHOW_CUSTOM
actionBar.setDisplayShowTitleEnabled(true) //对应ActionBar.DISPLAY_SHOW_TITLE
actionBar.hide() // 影藏标题栏
actionBar.show() // 显示标题栏
-
<?xml version="1.0" encoding="utf-8"?>
-
<menu xmlns:android="http://schemas.android.com/apk/res/android" ><item
-
android:id="@+id/menu1"
-
android:actionLayout="@layout/list_item"
-
android:actionViewClass="android.widget.SearchView"
-
android:icon="@drawable/ic_launcher"
-
android:showAsAction="ifRoom|collapseActionView"
-
android:title="@string/app_name"/>
-
<item
-
android:id="@+id/select"
-
android:showAsAction="ifRoom"
-
android:title="@string/select_all">
-
</item>
-
<item
-
android:id="@+id/delete"
-
android:enabled="false"
-
android:showAsAction="ifRoom|withText"
-
android:title="@string/delete">
-
</item>
-
</menu>
如上:
加上android:actionViewClass="android.widget.SearchView"属性后,此条MenuItem图片显示为搜索图片,点击后出现搜索框,点搜索框右边的X退出搜索模式,如果在android:showAsAction属性中加上collapseActionView属性,那么MenuItem图片为自定义的图片,并且靠点击左上角图片退出搜索模式。
android:actionLayout="@layout/list_item"属性与android:actionViewClass不能共存,有android:actionViewClass则android:actionLayout属性不起作用。
例子:点击打开链接
还有一种ActionBar,点击后下拉出一列View来,类似ListPopWindow。
只需在onCreate方法中加上
-
ActionBar actionBar = getActionBar();
-
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
-
actionBar.setListNavigationCallbacks(mSpinnerAdapter, mOnNavigationListener);
上面第三行第一个参数是SpinnerAdapter的对象,第二个参数是ActionBar.OnNavigationListener的对象。
设置后ActionBar栏会自动多出一个item来,默认是从左往右排布,也就是说如果HomeActioBar与Title都隐藏,那么其将会在最左边。