本文Android3.0及以上版本中ActionBar的基本使用方法。
目录
1. ActionBar说明
2. ActionBar中添加按钮
3. ActionBar状态设置
4. 覆盖ActionBar
1. ActionBar说明
在Android3.0(API level 11)及以上版本,可以通过在manifest中使用主题"Theme.Holo 及 它的其它相关主题"来添加ActionBar。
例如,在"ActionBar示例一"中有添加以下属性:
android:theme="@android:style/Theme.Holo.Light.DarkActionBar"
如果要在"Android 2.1及以上版本"添加ActionBar,则需要通过引入"Android Suppor Library"的方式,来使用ActionBar。
2. ActionBar中添加按钮
点击查看:示例工程
2.1 添加方式
第一步:通过添加xml文件来指令ActionBar中的按钮。例如,添加res/menu/main_activity_actions.xml
,内容如下:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:showAsAction="ifRoom" />
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:showAsAction="never" />
</menu>
说明:
android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
(01) ifRoom -- 如果有空间,则显示该按钮。
(02) withText -- 显示文本。
(03) never -- 不将该按钮显示在ActionBar上。
(04) always -- 总是将该按钮显示在ActionBar上。
(05) collapseActionView -- 将按钮组合到ActionBar中。
第二步:重写onCreateOptionsMenu()方法,并在解析上一步的xml文件。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
2.2 响应按钮
覆盖onOptionsItemSelected()方法,从而对相应的ActionBar按钮做出响应。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_search:
openSearch();
return true;
case R.id.action_settings:
openSettings();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
3. ActionBar状态设置
点击查看:示例工程
3.1 使用主题
可以使用不同的ActionBar主题:
Theme.Holo: ActionBar和Body都是黑色。
Theme.Holo.Light: ActionBar和Body都是浅色。
Theme.Holo.Light.DarkActionBar: ActionBar是黑色,Body是浅色。
3.2 自定义主题
可以自定义主题,并在主题中指明ActionBar的各个属性。
例如,自定义主题,主题对应的style(res/values/themes.xml)内容如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme"
parent="@android:style/Theme.Holo">
<item name="android:actionBarStyle">@style/MyActionBar</item>
<item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>
<item name="android:actionMenuTextColor">@color/actionbar_text</item>
</style>
<!-- ActionBar styles -->
<style name="MyActionBar"
parent="@android:style/Widget.Holo.ActionBar">
<item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
</style>
<!-- ActionBar title text -->
<style name="MyActionBarTitleText"
parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textColor">@color/actionbar_text</item>
</style>
<!-- ActionBar tabs text styles -->
<style name="MyActionBarTabText"
parent="@android:style/Widget.Holo.ActionBar.TabText">
<item name="android:textColor">@color/actionbar_text</item>
</style>
</resources>
上面的主题,自定义了ActionBar的文字颜色等内容。
注意:上面的style的parent是android自带的样式!
4. 覆盖ActionBar
点击查看:示例工程
当ActionBar覆盖在Activity之上时,需要注意布局!在布局中,将Activity距离顶部的距离设为ActionBar的高度。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="?android:attr/actionBarSize">
...
</RelativeLayout>