我目前正在将新的AppCompat库混入周围,从而将 Material 设计带入了较旧的设备。

将工具栏设置为操作栏对我来说很好用,但是在调用inflateMenu(int resId)时,该工具栏似乎无能为力。从文档中,我认为这将替换从onCreateOptionsMenu调用的getMenuInflater().inflate(int resId)
如果我选择后者,则菜单项会正确膨胀并添加到工具栏,但是inflateMenu似乎什么也没有。

我想念什么?

Activity 代码:

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;
}

提前致谢!

最佳答案

如果您要调用setSupportActionBar(),则无需使用toolbar.inflateMenu(),因为工具栏将充当您的ActionBar。所有与菜单相关的回调均通过默认回调。唯一需要调用toolbar.inflateMenu()的时间是将工具栏用作独立窗口小部件时。在这种情况下,您还必须通过以下方式处理菜单项的单击事件

toolbar.setOnMenuItemClickListener(
        new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                // Handle menu item click event
                return true;
            }
});

09-28 15:05