在活動中建立選單

要定義自己的選單,請在專案的 res/menu/目錄中建立一個 XML 檔案,並使用以下元素構建選單:

  • <menu>:定義一個選單,它包含所有選單項。
  • <item>:建立一個 MenuItem,它表示選單中的單個專案。我們還可以建立巢狀元素以建立子選單。

步驟 1:

建立你自己的 xml 檔案,如下所示:

res/menu/main_menu.xml

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/aboutMenu"
        android:title="About" />
    <item
        android:id="@+id/helpMenu"
        android:title="Help" />
    <item
        android:id="@+id/signOutMenu"
        android:title="Sign Out" />
</menu>

第 2 步:

要指定選項選單,請覆蓋活動中的 onCreateOptionsMenu()

在此方法中,你可以膨脹選單資源(在 XML 檔案中定義,即 res/menu/main_menu.xml

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

當使用者從選項選單中選擇一個專案時,系統將呼叫你的活動的重寫 onOptionsItemSelected() 方法。

  • 此方法傳遞所選的 MenuItem。
  • 你可以通過呼叫 getItemId() 來識別該專案,getItemId() 返回選單項的唯一 ID(由選單資源中的 android:id attribute 定義 - res/menu/main_menu.xml)* /
 @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.aboutMenu:
            Log.d(TAG, "Clicked on About!");
            // Code for About goes here
            return true;
        case R.id.helpMenu:
            Log.d(TAG, "Clicked on Help!");
            // Code for Help goes here
            return true;
        case R.id.signOutMenu:
            Log.d(TAG, "Clicked on Sign Out!");
            // SignOut method call goes here
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

包起來!

你的 Activity 程式碼應如下所示:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "mytag";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.aboutMenu:
                Log.d(TAG, "Clicked on About!");
                // Code for About goes here
                return true;
            case R.id.helpMenu:
                Log.d(TAG, "Clicked on Help!");
                // Code for Help goes here
                return true;
            case R.id.signOutMenu:
                Log.d(TAG, "User signed out");
                // SignOut method call goes here
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

你自己的選單的外觀截圖:

StackOverflow 文件