Android ActionBar
action bar 包括 左上的action icon 和中间的action item , 右上的action overflow(不重要的action item)(或通过menu按键唤出)
1设置miniSdkVersion 为android3.0(11)或以上,默认设置Theme.Holo主题,此主题自带ActionBar ,默认显示icon和label(可查看manifest.xml),提供对以前版本的支持可通过导入v7包实现(查android版本分布图知,意义不大)
2 可设置Theme.Holo.NoActionBar主题实现不带actionBar的效果
3 actionBar的显示隐藏:
ActionBar actionBar = getSupportActionBar();(api 11以上用getActionBar())
actionBar.hide();(actionBar.show显示)
4 提供向上的导航(类似于微信聊天界面左上的左箭头)(以下方式适合父activity保持不变的情况,复杂的情况参考官方api文档)
第一步。调用actionBar的setDisplayHomeAsUpEnabled()方法 显示左箭头
ActionBar actionBar = getSupportActionBar();(api 11及以上使用getActionBar())
actionBar.setDisplayHomeAsUpEnabled(true);
可通过 setDisplayShowHomeEnabled()设置icon显示与否
第二步 设置activity的关系,通过以下两种方式实现
1. android 4.1(16)以后可通过在manifest.xml中activity标签android:parentActivityName指定上一个activiy.
2.android 4.1以前可通过添加support library v7 然后在activity标签中添加<meta-data>子标签,设置android.support.PARENT_ACTIVITY属性为上一个activity
示例:
<application ... >
...
<!-- The main/home activity (it has no parent activity) -->
<activity
android:name="com.example.myfirstapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
android:name="com.example.myfirstapp.DisplayMessageActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName="com.example.myfirstapp.MainActivity" >
<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myfirstapp.MainActivity" />
</activity>
</application>
5.添加action items
android系统通过调用onCreateOptionsMenu()显示action items. 在onCreateOptionsMenu方法中,通过MenuInflater从定义了菜单项的menu资源文件中inflate到Menu中,这样可添加action item 到action bar中
a. 定义菜单项 res/menu/main_activity_actions.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<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" />
</menu>
b. 通过MenuInfalte添加到action bar
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);
}
6. 让action item 变为action button 可在菜单项定义文件<item>标签下 设置showAsAction="ifRoom" 或 showAsAction="always"其他可选值可查api文档, action button 默认只显示icon 可通过showAsAtion="withText"在
屏幕空间足够的情况下显示title, 但必须同时设置icon和title(原因:action item 在action overflow中只显示text, long press action button 显示tips ,为视觉受损人士考虑)
<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"
yourapp:showAsAction="ifRoom" />
...
</menu>
自定义域名空间yourapp是为提供对老版本的支持
7. 处理action items点击事件
当用户点击某action item时, 系统调用onOptionsItemSelected() 通过传递到这个方法的MenuItem的getItemId方法可识别具体是哪一个action item, 返回的id和<item>标签下定义的id一致
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_compose:
composeMessage();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
8. 添加action view
9. Overlay mode
创建自定义Theme 设置windowActionBarOverlay为true
10. split action bar 参考官方文档
11. action provider
12. Navigation Tabs
参考: http://blog.csdn.net/bigconvience/article/details/28886241
浙公网安备 33010602011771号