ActionBar导览
官方:http://developer.android.com/guide/topics/ui/actionbar.html
相关博客:http://blog.csdn.net/guolin_blog/article/details/18234477 讲得很全面
简介:action bar是一个窗体功能,它用来表示用户当前的操作界面位置,并且提供一些操作的按钮和导航功能。 action bar可以给用户一种熟悉的感觉,他们能清楚地知道下一步该如何操作。action bar拥有非常好的系统级支持。可以自动适配不同的屏幕。
1、 展示了APP icon; 2、可直接操作的按钮 actionitems; 3、overflow 隐藏一些可操作的按钮,点击后展开。
添加ActionBar
当指定targetSdkVersion或则minSdkVersion为API11(android 3.0)以上时,当activity的主题设置为”Theme.Holo”时,则默认包含action bar功能;如果不希望使用action bar,则可以使用” Theme.Holo.NoActionBar”主题。
隐藏ActionBar
首先获得action bar对象,再调用hide()方法即可,如果需要再次显示,则调用show()方法。
ActionBar actionBar = getActionBar();
actionBar.hide();
à需要注意的是,当隐藏和显示actionbar时会使得activity进行二次布局来填充原来action bar所在区域。如果action bar需要经常性地隐藏和显示,我们应该使用action bar的悬浮功能(设置windowActionBarOverlay为true),此时,它会在activity上面来绘制这个action bar。这样,当隐藏和显示action bar时就不需要对activity进行二次布局。
修改ActionBar的图标和标题
默认情况下,系统会使用<application>或者<activity>中icon属性指定的图片来作为ActionBar的图标,但是我们也可以改变这一默认行为。如果我们想要使用另外一张图片来作为ActionBar的图标,可以在<application>或者<activity>中通过logo属性来进行指定,如果需要指定标题,也只需要在<application>或者<activity>中通过lable属性来进行指定。
添加Action按钮
ActionBar还可以根据应用程序当前的功能来提供与其相关的Action按钮,这些按钮都会以图标或文字的形式直接显示在ActionBar上。当然,如果按钮过多,ActionBar上显示不完,多出的一些按钮可以隐藏在overflow里面(最右边的三个点就是overflow按钮),点击一下overflow按钮就可以看到隐藏的全部Action按钮了。(如果不愿意使用overflow按钮,使用Menu菜单键呼出这些按钮也是可以的)
当Activity启动的时候,系统会调用Activity的onCreateOptionsMenu()方法来取出所有的Action按钮,我们只需要在这个方法中去加载一个menu资源,并把所有的Action按钮都定义在资源文件里面就可以了。示例:
在menu中定义action buttons,res/menu/main_activity_actions.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"/>
<item android:id="@+id/action_compose"
android:icon="@drawable/ic_action_compose"
android:title="@string/action_compose"
yourapp:showAsAction="ifRoom"/>
</menu>
// showAsAction用来控制action item的位置
//always--始终显示
//never—始终不显示在action bar中,显示在overflow中
//ifRoom当空间足够时直接显示在action bar中,否则显示在overflow中
然后在activity的onCreateOptionsMenu方法中导入菜单资源。
@Override
public boolean onCreateOptionsMenu(Menu menu){
// Inflate themenu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
在activity的onOptionsItemSelected方法中可以处理每一项action item单击事件。
@Override
public boolean onOptionsItemSelected(MenuItem item){
// Handlepresses on the action bar items
switch (item.getItemId()){
case R.id.action_search:
openSearch();
return true;
case R.id.action_compose:
composeMessage();
return true;
default:
return super.onOptionsItemSelected(item);
//如果这个action item是由fragment添加的,
//由于这些点击事件将首先传递给activity,所以当有未处理的点击事件时应该调用父类的//方法返回,以保证点击事件的正确传递。
} }
分离actionbar
如图所示,可以将action bar各部分分开。
图片二中效果可以通过配置activity属性实现:
<manifest ...>
<activity uiOptions="splitActionBarWhenNarrow" ...>
<meta-data android:name="android.support.UI_OPTIONS"
android:value="splitActionBarWhenNarrow"/>
</activity>
</manifest>
图片三的效果可以在onCreate中设置:
setDisplayShowTitleEnabled(false)
setDisplayShowHomeEnabled(false)
通过ActionBar图标进行导航
添加ActionProvider
添加NavigationTabs
当屏幕比较宽时:
当屏幕比较窄时(这些是由系统自动调整的)
添加Drop-downNavigation
定义ActionBar样式
可以根据需要,对action bar背景、title字体等自定义样式。