59

現在、古いデバイスにマテリアル デザインをもたらす新しい AppCompat ライブラリをいじっています。

ツールバーをアクションバーとして設定するとうまくいきますが、ツールバーは呼び出し時に何もしないようinflateMenu(int resId)です。getMenuInflater().inflate(int resId)ドキュメントから、これはonCreateOptionsMenuから呼び出されたものを置き換えることだと思いました。後者を実行すると、メニュー項目は正しく拡張されてツールバーに追加されますが、inflateMenu は何もないように見えます。

私は何が欠けていますか?

活動コード:

Toolbar toolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.inflateMenu(R.menu.main); // this does nothing at all
    setSupportActionBar(toolbar);
}

// this works
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

前もって感謝します!

4

1 に答える 1

110

Toolbar が ActionBar として機能しているため、呼び出し ているsetSupportActionBar()場合は使用する必要はありません。toolbar.inflateMenu()すべてのメニュー関連のコールバックは、デフォルトのものを介しています。呼び出す必要があるtoolbar.inflateMenu()のは、ツールバーをスタンドアロン ウィジェットとして使用している場合のみです。この場合、メニュー項目のクリック イベントも処理する必要があります。

toolbar.setOnMenuItemClickListener(
        new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                // Handle menu item click event
                return true;
            }
});
于 2014-10-22T16:13:20.790 に答える