【问题标题】:Toolbar.inflateMenu seems to do nothingToolbar.inflateMenu 似乎什么也没做
【发布时间】:2014-12-18 04:05:11
【问题描述】:

我目前正在使用新的 AppCompat 库,为旧设备带来材料设计。

将工具栏设置为操作栏对我来说很好,但工具栏在调用 inflateMenu(int resId) 时似乎没有任何作用。从文档中,我认为这是替换从 onCreateOptionsMenu 调用的getMenuInflater().inflate(int resId)。 如果我做后者,菜单项会正确膨胀并添加到工具栏,但 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;
}

提前致谢!

【问题讨论】:

    标签: android android-appcompat material-design android-toolbar


    【解决方案1】:

    如果您调用setSupportActionBar(),则不需要使用toolbar.inflateMenu(),因为工具栏充当您的操作栏。所有菜单相关的回调都是通过默认的回调。唯一需要调用toolbar.inflateMenu() 的时间是当您将工具栏用作独立小部件时。在这种情况下,您还必须通过

    处理菜单项点击事件
    toolbar.setOnMenuItemClickListener(
            new Toolbar.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    // Handle menu item click event
                    return true;
                }
    });
    

    【讨论】:

    • 感谢您的澄清。所以 inflateMenu 似乎只与未设置为 ActionBar 的工具栏相关/工作。
    • 在标准(非独立小部件)中,我看到 onCreateOptionsMenu 直到 after onResume 才被调用!!!这打破了我目前使用 onCreateOptionsMenu 在调用 onResume 之前在工具栏中填充自定义视图的成员字段的技术。知道出了什么问题或如何做到这一点吗?
    • 我正在使用setSupportActionBar。如果我不膨胀菜单,如何在工具栏上显示操作项??
    • 如果你真的想使用toolbar.inflateMenu(),你可以按照这个答案:stackoverflow.com/a/63529156/2534007
    猜你喜欢
    • 1970-01-01
    • 2021-07-07
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多