1.修改图标
默认的,ActionBar使用Activity的android:icon属性,还有一致的android:label属性。
第二种方式就是使用android:logo属性。不像方方正正的icon,logo的图像不会有任何宽度限制。logo图像典型的给你的APP提供品牌。比较好的方式:当你有Logo的时候,你可以隐藏label。
当Activity既指定了android:icon还指定了android:logo,logo会覆盖在icon之上。程序中可以设置一下属性:
actionBar.setDisplayUseLogoEnabled(displayLogo)。
如果两个图标都要隐藏的话,可以通过在程序中设置一下属性:
actionBar.setDisplayShowHomeEnabled(false);
注意:APP的icon/logo典型的被用来作为一个快捷的导航方式到main activity,通常你至少得保留一个。
2.修改文本标签
修改文本内容,使用setTitle和setSubTitle。一个主标题,一个子标题。
actionBar.setSubtitle(“Inbox”);
actionBar.setTitle(“Label:important”);
隐藏文本标签:
getActionBar().setDisplayShowTitleEnabled(false);
3.控制导航行为
App icons:使用icon或者logo导航, 典型的导航到APP的主界面。也可以通过配置Icon去代表移动到上一级的意思。Icon导航可以用来导航Activity栈。
Tabs和下拉列表:ActionBar支持内嵌的Tabs和下拉列表。Tabs和下拉列表被用来作为Activity内Fragments的转换。
3.1.App icons
在大多数情况,APP的icon应该被作为快捷方式,导航到主Activtiy,典型的说也就是Activtiy栈的根。为了使APP icon可以被点击,你必须调用ActionBar的setHomeButtonEnabled方法。
点击icon会被系统作为一个特殊的Menu Item的点击。所以可以在onOptionsItemSelected方法中去监听,它的id为android.R.id.home。
传统的,Android APP在activity之间跳转完之后,可以使用返回按钮回退。为了也支持这种模式,可以配置app icon去提供“向上”导航。
//当向上导航的时候,通常使用icon而不是logo
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(true);
向上导航在样子上就多了个箭头,跟setHomeButtonEnabled本质上相同,都会被作为特殊的MenuItem,id是android.R.id.home,也需要在onOptionsItemSelected去监听。
3.2.导航Tabs
ActionBar提供导航TAB和下拉列表。值得注意的是,一次只能激活其中的一种导航。这些导航选择项被设计用来与Fragments更亲近。通过替换可见的Fragments从而达到修改Activity内容的目的。导航TAB是TabWidget的替代品。
配置Tabs:
通常情况下,使用Tabs会隐藏文本标签。
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);
//TabsDemo:
Tab tabOne = actionBar.newTab();
tabOne.setText(“First Tab”)
.setIcon(R.drawable.ic_launcher)
.setContentDescription(“Tab the First”)
.setTabListener(
newTabListener<MyFragment>
(this, R.id.fragmentContainer, MyFragment.class));
actionBar.addTab(tabOne);
此外,你还可以使用setCustomView方法,自定义Tab布局,代替标准的文字+图片模式。注意:setContentDescription方法是在Android 4.0(API 14)引入的,用来提供更细节的描述。
Tab的转换是由TabListener来操控的,当tab被选择、未选择、重新选择时,允许你创建Fragment事务作为回应。
public static class TabListener<T extends Fragment>
implements ActionBar.TabListener {
private MyFragment fragment;
private Activity activity;
private Class<T> fragmentClass;
private int fragmentContainer;
public TabListener(Activity activity, int fragmentContainer,
Class<T> fragmentClass) {
this.activity = activity;
this.fragmentContainer = fragmentContainer;
this.fragmentClass = fragmentClass;
}
// Called when a new tab has been selected
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if(fragment ==null) {
String fragmentName = fragmentClass.getName();
fragment =
(MyFragment)Fragment.instantiate(activity, fragmentName);
ft.add(fragmentContainer, fragment,null);
fragment.setFragmentText(tab.getText());
}else{
ft.attach(fragment);
}
}
// Called on the currently selected tab when a different tag is selected.
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if(fragment !=null) {
ft.detach(fragment);
}
}
// Called when the selected tab is selected.
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO React to a selected tab being selected again.
}
}
3.3.下拉列表导航
配置下拉列表:
下拉列表就像一个Spinner。数据源+Adapter
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)
//Demo:
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
ArrayAdapter dropDownAdapter =
ArrayAdapter.createFromResource(this,
R.array.my_dropdown_values,
android.R.layout.simple_list_item_1);
actionBar.setListNavigationCallbacks(dropDownAdapter,
newOnNavigationListener() {
public boolean onNavigationItemSelected(int itemPosition,
long itemId) {
// TODO: 点击处理事件
return true;
}
});
3.4.自定义导航View
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setCustomView(R.layout.my_custom_navigation);
4.Splite ActionBar模式
Splite ActionBar模式:顶部放不下的action,帮忙放在底部。
<activity
android:label=”My Activity”
android:name=”.ActionBarActivity”
android:logo=”@drawable/ic_launcher”
android:uiOptions=”splitActionBarWhenNarrow”>