ActionBar位于Activity的顶部,可用来显示activity的标题、Icon、Actions和一些用于交互的View。它也可被用于应用的导航。
ActionBar 是在Android 3.0(API 11)中加入到SK中的,想在低版本中使用ActionBar给项目导入Support Library v7包即可。
使用ActionBar
开发API11以下的程序,首先必须在AndroidManifest.xml中指定Application或Activity的theme是Theme.Holo或其子类,否则将无法使用ActionBar。
如:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light"
android:name=".BaseApplication"
>
2.1 创建Actions
Actions即ActionBar中的每个交互项,通常在XML文件中指定(位于res/menu)。在menu资源文件中定义Action的方法如下:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:wangxiapp="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item android:id="@+id/action_search"
android:icon="@mipmap/ic_action_search" //搜索图标的图片
android:title="research"
android:orderInCategory="100" //此item在ActionBar的位置。当有多个item时越大越在后面
wangxiapp:showAsAction="ifRoom"
/>
</menu>
showAsAction属性用来定义每个Action是如何显示的,always表示永远显示在ActionBar中,如果屏幕空间不够则无法显示,ifRoom表示屏幕空间够的情况下显示在ActionBar中.
在Activity中创建ctionBar的Action代码位于onCreateOptionsMenu()中,下面一段代码展示了创建过程:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu, menu); //第一个参数设置ActionBar最左边的图片
return true;
}
有的时候由于一些特殊原因,最左边的图片,即应用的图标不显示,此时需要一些设置。在MainActivity中添加如下代码:
actionBar = getSupportActionBar();
actionBar.setLogo(R.mipmap.ic_launcher);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
运行效果如图:
现在我们看到了设置的图片,但没有看的我们在item中设置的title。原因是:
如果你的menu既提供了title又提供了icon属性,那么默认显示icon,如果你想要显示文字title,就添加”withText”属性,如下:
1 <item yourapp:showAsAction="ifRoom|withText" ... />
备注:“withText”属性是给action bar的一个暗示,告诉它应该显示文字title,如果可以的话,就显示,但是当icon是可用的并且action bar的空间受到限制的时候,就不一定会显示了。
你应该为每一个item声明title属性,即使你不声明title要显示,因为:
1)如果没有足够的空间显示所有的action item,那显示在overflow中的Item就只会显示title,此时图片会变成竖着的三个点,点击时就会显示title;
2)视觉受损者会读取title;
3)如果action item只显示icon,那么当用户长按item的时候,会显示一个小的提示窗口显示action的title;