在android3.0以后,谷歌为了统一全局UI界面,推出的新导航栏功能,它标识了用户当前操作界面的位置,并提供了额外的用户动作、界面导航等一些通用功能。使得用户在使用任意大小的硬件以及任意软件都能自适应及方便操作。如下图所示:
其中,1为actionbar的图标,2为两个actionBar按钮,3为overflow按钮
由于Action Bar是在3.0以后的版本中加入的,如果想在2.x的版本里使用ActionBar的话则需要引入Support Library_v7,不过3.0之前版本的市场占有率已经非常小了,这里简单起见我们就不再考虑去做向下兼容,而是只考虑4.0以上版本的用法。
显示和取消ActionBar:
很简单,在只需要在AndroidManifest.xml中指定Application或Activity的theme是Theme.Holo或其子类就可以了,而使用Eclipse创建的项目自动就会将Application的theme指定成Theme.Holo,所以ActionBar默认都是显示出来的。新建一个空项目并运行,效果如下图所示:
那么问题来了,因为我的手机有物理菜单键,ActionBar最右边的overflow按钮不见了!那么此时我们如何查看隐藏在overflow中的Action按钮呢?
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......
setOverflowShowingAlways();
}
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
} catch (Exception e) {
e.printStackTrace();
}
}
action.hide();
android:logo="@drawable/android">
//action.hide();
action.setTitle(“示例”);
//action.setTitle(resId);
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
<item
android:id="@+id/action_set"
android:icon="@drawable/set"
android:showAsAction="always"
android:title="@string/set"
/>
<item
android:orderInCategory="100"
android:showAsAction="always"
android:title="@string/action_settings"/>
</menu>
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
- 当ActionBar中的剩余空间不足的时候,如果Action按钮指定的showAsAction属性是ifRoom的话,该Action按钮就会出现在overflow当中,此时就只有title能够显示了。
- 如果Action按钮在ActionBar中显示,用户可能通过长按该Action按钮的方式来查看到title的内容。
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.action_settings:
//do something
return true;
default:
return super.onOptionsItemSelected(item);
}
}
通过Action Bar图标进行导航
//action.hide();
action.setTitle("示例");
action.setDisplayHomeAsUpEnabled(true);
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.action_settings:
return true;
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
<item name="android:actionMenuTextColor">#FF0000</item><!-- 设置文字颜色 -->
<item name="android:actionBarStyle">@style/my_actionbar_style</item>
</style>
<style name="my_actionbar_style" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#ffff00</item><!-- 设置背景颜色 -->
</style>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!--
android:startColor和android:endColor分别为起始和结束颜色
android:angle是渐变角度,必须为45的整数倍。
线性渐变:
android:type="linear"
径向渐变 :
android:type="radial"
径向渐变需要指定半径如: android:gradientRadius="50"
-->
<gradient
android:angle="270"
android:endColor="#ff8c00"
android:startColor="#FFFFFF"
android:type="linear" />
</shape>
再在上面的style中,<style name="my_actionbar_style" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">@drawable/actionbar_gradient_bg</item><!-- 设置背景颜色 -->
</style>
OK,今天就到这吧,第一次发博客,简直要了我的老命,嘿嘿,这次只说了下actionBar的一些简单应用,别的留到下一篇吧。希望我有那个动力呀。