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

posted on 2015-03-06 23:56  流浪者的五月  阅读(204)  评论(0)    收藏  举报

导航