天天看點

android中ActionBar以及其與Action Button分離的實作文章介紹ActionBar的使用,參考Android官方資料ActionBar

文章介紹ActionBar的使用,參考Android官方資料ActionBar

1.ActinBar支援的添加

ActionBar是Android3.0(API levle 11)添加的新特性,在Android3.0及以上平台中隻需要以下代碼便實作:

import android.app.ActionBar;
           

在Android3.0以下平台需要導入支援庫(Android導入支援庫教程):

import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity
           

并且,在Android3.0以下平台,你的Activity必須擴充ActionBarActivity,你的application或者activity必須使用Theme.AppCompat主題或擴充自Theme.AppCompat的主題:

public class MainActivity extends ActionBarActivity{/**/}
           
<application android:theme="@style/Theme.AppCompat.Light" >
           

至此,你的Activity已經擁有一個預設樣式的的ActionBar了。

2.運作時顯示/隐藏ActionBar

在Android3.0及以上平台中隻需要以下代碼擷取目前Activity的ActionBar的執行個體:

ActionBar actionBar = getActionBar();
           

在Android3.0以下平台使用以下代碼擷取ActionBar執行個體:

ActionBar actionBar = getSupportActionBar();
           

擷取到ActionBar引用後就可對ActionBar進行顯示/隐藏了。

actionBar.show();//顯示ActionBar
actionBar.hide();//隐藏ActionBar
           

3.使ActionBar支援導航到"父Activity"

所謂導航到父Activity,就是點選ActionBar左端的Icon或者logo時可以回到目前Activity的上一個Activity,隻需一行代碼即可:

actionBar.setDisplayHomeAsUpEnabled(true);
           

可以在manifest檔案中指定目前Activity的父Activity:

從Android4.1(API level 16)開始,隻需要在activity元素中聲明parentActivityName即可;為了支援低版本平台,需要為activity添加meta-data子元素:

<activity
            android:name="com.liuyz.actionbardemo.OtherActivity"
            android:label="@string/title_activity_other"
            android:parentActivityName="com.liuyz.actionbardemo.MainActivity" >
            <!-- 使actionbar可以導航到上一個activity,api16及以上需要指定目前activity的 parentActivityName屬性值為上一個activity的全限定名;
        api16以下需為目前activity添加meta-data子元素 如下 -->
            <meta-data android:name="android.support.PARENT_ACTIVITY"
                android:value="com.liuyz.actionbardemo.MainActivity" />
</activity>
           

4.為ActionBar添加Action Button

Action Button的資源檔案存放于res/menu/下,如main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.liuyz.actionbardemo.MainActivity" >

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never"/>
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        android:orderInCategory="102"
        android:title="@string/action_search"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_new"
        android:icon="@drawable/ic_action_new"
        android:orderInCategory="103"
        android:title="@string/action_new"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_edit"
        android:icon="@drawable/ic_action_edit"
        android:orderInCategory="104"
        android:title="@string/action_edit"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_refresh"
        android:icon="@drawable/ic_action_refresh"
        android:orderInCategory="105"
        android:title="@string/action_refresh"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_remove"
        android:icon="@drawable/ic_action_remove"
        android:orderInCategory="106"
        android:title="@string/action_remove"
        app:showAsAction="ifRoom"/>

</menu>
           

該檔案聲明了6個item,其中showAsAction屬性,ifRoom表示如果ActionBar有足夠的空間則将該item顯示在ActionBar,否則顯示到Menu菜單中;never表示永遠顯示在Menu菜單中,無論空間是否足夠。orderInCategory屬性值小的item優先顯示到ActionBar。豎屏和橫屏顯示效果如下:

android中ActionBar以及其與Action Button分離的實作文章介紹ActionBar的使用,參考Android官方資料ActionBar
android中ActionBar以及其與Action Button分離的實作文章介紹ActionBar的使用,參考Android官方資料ActionBar

在需要添加Action Button的Activity中重寫onCreateOptionsMenu方法将這6個item添加到ActionBar:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // 填充menu到ActionBar
        getMenuInflater().inflate(R.menu.main, menu);
        //可以在次為menu items添加監聽
        return true;
    }
           

重寫onOptionsItemSelected方法為每個menu添加點選事件響應:

@Override
    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.
        int id = item.getItemId();
        switch (id) {
        case R.id.action_settings:
            showToastShort("settings");
            break;
        case R.id.action_search:
            showToastShort("search");
            break;
        case R.id.action_new:
            showToastShort("new");
            break;
        case R.id.action_edit:
            showToastShort("edit");
            break;
        case R.id.action_refresh:
            showToastShort("refresh");
            break;
        case R.id.action_remove:
            showToastShort("remove");
            break;
        default:
            break;
        }
        return super.onOptionsItemSelected(item);
    }
           

5.分離ActionBar與Action Button

在較窄的螢幕上使ActionBar與Action Button分離,Action Button顯示到螢幕的下方,添加uiOptions屬性到application或者activity元素,api14及以下需要在activity内添加子元素meta-data,如下:

<activity
            android:name="com.liuyz.actionbardemo.MainActivity"
            android:label="@string/app_name"
            android:uiOptions="splitActionBarWhenNarrow" >
            <!-- 在窄螢幕或豎屏上使actionBar與action button分離,将action顯示在螢幕的下方,添加uiOptions屬性到application或者activity元素;
            api14及以下需添加如下子元素meta-data到activity -->
            <meta-data
                android:name="android.support.UI_OPTIONS"
                android:value="splitActionBarWhenNarrow" />
        </activity>   
           

效果如下:

android中ActionBar以及其與Action Button分離的實作文章介紹ActionBar的使用,參考Android官方資料ActionBar
android中ActionBar以及其與Action Button分離的實作文章介紹ActionBar的使用,參考Android官方資料ActionBar