ActionBar的簡單使用

ActionBar介紹


在API22之前我們使用標題欄基本都是在ActionBarActivity的Activity中處理的,而API22之後,谷歌遺棄了ActionBarActivity,推薦我們也可以說是強制我們使用AppCompatActivity。
ActionBar是位於Activity頂部,用於顯示Activity的圖標,標題,以及菜單的。可用於導航等功能,廣泛應用於View的交互。ActionBar可分爲三部分,分別是第一Icon、第二Item(操作按鈕)、安排不下的或不足夠重要的操作被隱藏在第三overflow按鈕(超出空間的action)。
這裏寫圖片描述
所有的操作按鈕和 action overflow 中其他可用的條目都被定義在 menu資源 的 XML 文件中。通過在項目的 res/menu 目錄中新增一個 XML 文件來爲 action bar 添加操作。

<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"
          android:showAsAction="ifRoom" />
    <!-- 設置, 在溢出菜單中展示 -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          android:showAsAction="never" />
</menu>

icon 屬性要求每張圖片提供一個 resource ID。

當 action bar 有可用空間時,搜索操作將作爲一個操作按鈕來顯示,但設置操作將一直只在 action overflow 中顯示。

爲 Action Bar 添加操作


要爲 action bar 佈局菜單條目,就要在 activity 中實現 onCreateOptionsMenu() 回調方法來 inflate 菜單資源從而獲取 Menu 對象。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // 爲ActionBar擴展菜單項
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity_actions, menu);
    return super.onCreateOptionsMenu(menu);
}

爲操作按鈕添加響應事件


當用戶按下某一個操作按鈕或者 action overflow 中的其他條目,系統將調用 activity 中onOptionsItemSelected()的回調方法。在該方法的實現裏面調用MenuItem的getItemId()來判斷哪個條目被按下 - 返回的 ID 會匹配我們聲明對應的 <item> 元素中 android:id 屬性的值。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // 處理動作按鈕的點擊事件
    switch (item.getItemId()) {
        case R.id.action_search:
            openSearch();
            return true;
        case R.id.action_settings:
            openSettings();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

爲下級 Activity 添加向上按鈕


在不是程序入口的其他所有屏中(activity 不位於主屏時),需要在 action bar 中爲用戶提供一個導航到邏輯父屏的up button(向上按鈕)。
這裏寫圖片描述
當運行在 Android 4.1(API level 16) 或更高版本,或者使用 Support 庫中的 ActionBarActivity 時,實現向上導航需要在 manifest 文件中聲明父 activity ,同時在 action bar 中設置向上按鈕可用。

<application ... >
    ...
    <!-- 主 main/home 活動 (沒有上級活動) -->
    <activity
        android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- 主活動的一個子活動-->
    <activity
        android:name="com.example.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!--  meta-data 用於支持 support 4.0 以及以下來指明上級活動 -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

然後,通過調用setDisplayHomeAsUpEnabled() 來把 app icon 設置成可用的向上按鈕:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_displaymessage);
    //設置標題文字
    getSupportActionBar().setTitle("地理位置");
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // 如果你的minSdkVersion屬性是11或更高, 應該這麼用:
    // getActionBar().setDisplayHomeAsUpEnabled(true);
    //修改圖標
    //getSupportActionBar().setHomeAsUpIndicator(R.mipmap.de_actionbar_back);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章