工具欄選單

摩西2016發表於2018-05-29

工具欄選單

新增字串資源

在\res\values\strings.xml中可新增App中使用到的字串資源,通過這種方式,可輕鬆實現語言的本地化。

<resources>
    <string name="app_name">DialogTest</string>
    <string name="action_settings">Settings</string>
</resources>

在XML檔案中定義選單

選單是一種類似於佈局的資源。建立選單定義檔案並放置在res/menu目錄下,Android會自動生成相應的資源ID。隨後,在程式碼中例項化選單時,就可以直接使用。
在專案工具視窗中,右鍵點選res目錄,選擇New->Android resource file選單項。在彈出的視窗介面,選擇Menu資源型別,並給資原始檔一個名稱,點選OK按鈕確認。
建立選單檔案

圖1 建立選單檔案

選單檔案格式

<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.zj.dialogtest.MainActivity">
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:icon="@android:drawable/ic_menu_add"
        android:title="@string/action_settings"
        app:showAsAction="ifRoom|withText" />
</menu>

每個選單項用一個item表示,常用屬性如下:
- android:id 定義此選單項的id,程式碼中可以通過此id引用該選單項
- android:icon 定義此選單項的圖表
- android:title 定義此選單項的文字標題,值可以是純文字量,但是建議@string引用字串資源
- android:showAsAction 用於指定選單選項是顯示在工具欄上,還是隱藏於溢位選單。該屬性當前設定為ifRoom和withText的組合值,因此,只要空間足夠,選單項圖示及其文字描述都會顯示在工具欄上,如果空間僅夠顯示圖示,文字描述就不會顯示,如空間不夠顯示任何項,選單就會隱藏到溢位選單。

在程式碼中建立選單

在程式碼中,Activity類提供了管理選單的回撥函式。需要選項選單時,Android會呼叫Activity的onCreateOptionsMenu(Menu)方法建立選單。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //TODO:從資原始檔載入選單
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

響應選單項選擇

當選擇具體選單項時,會觸發onOptionsItemSelected(MenuItem)回撥方法。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (id == R.id.action_settings) {
        //TODO:執行具體的選單動作
        return true;
    }
    return super.onOptionsItemSelected(item);
}

層級式導航

Android應用中有兩種返回導航方式,一種是通過back按鈕回退,一種是通過頁面左上角<-按鈕回退。雖然兩者都能實現頁面回退,但是兩種方式的機制是大不相同的,效果也不一樣。
使用者點選back按鈕時,如下的intent會被建立:

Intent intent = new Intent(this, TargetActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

FLAG_ACTIVITY_CLEAR_TOP指示Android在回退棧中尋找指定的Activity例項。如果存在,則彈出棧內所有其它的activity,讓啟動的目標activity出現在棧頂(顯示在螢幕上)。

通過<-按鈕實現返回導航的方式被稱作層級式導航,可在應用內實現逐級向上導航。

實現層級式導航

在AndroidManifest.xml中註冊的Activity有個屬性android:parentActivityName,使用者指示點選<-按鈕後返回到哪個上級activity。

<activity
    android:name=".ChildActivity"
    android:label="@string/title_activity_child"
    android:parentActivityName=".MainActivity"
    android:theme="@style/AppTheme.NoActionBar">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.zj.dialogtest.MainActivity" />
</activity>

相關文章