新的Android工具栏:如何隐藏溢出菜单图标?

4

我刚创建了一个包含新版Android工具栏的应用程序。我的问题是:如何隐藏这个溢出菜单图标/按钮:http://prntscr.com/62mmus? 我已经尝试过这种方法,但它没有起作用:

        Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
        mToolbar.hideOverflowMenu();

2
我该如何隐藏这个溢出菜单图标/按钮 - 不要在操作栏中放置任何动作项。删除您的 onCreateOptionsMenu()onOptionsItemSelected() 方法,以及它们使用的 menu 资源。然后,溢出菜单应该永远不会出现。 - CommonsWare
7个回答

23

只需使用:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
        return false;
}

完美无缺。谢谢。 - Sharp Edge
1
这也防止了Up(返回)按钮对其点击事件做出反应。 - Johann
如果有任何导航抽屉,这将禁用汉堡动作。只需不实现onCreateOptionsMenu()方法,溢出菜单就不会显示出来。 - Xenon Kfr
1
如何在没有返回值的方法/函数上调用“return”? - smoothBlue

3
这是我的做法。
这是位于菜单文件夹下的原始menu_main.xml文件:
<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=".MainActivity">
    <item android:id="@+id/action_settings" android:title="@string/action_settings"
        android:orderInCategory="100" app:showAsAction="never" />
</menu>

删除该项:

    <item android:id="@+id/action_settings" android:title="@string/action_settings"
        android:orderInCategory="100" app:showAsAction="never" />

请转到主要活动并注释掉以下内容:if (id == R.id.action_settings)。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
   // if (id == R.id.action_settings) {
   //     return true;
   // }

    return super.onOptionsItemSelected(item);
}

运行您的应用程序 - 溢出菜单图标已消失。


2
我的解决方法是:在菜单文件(global.xml)中的菜单项中添加以下内容:android:visible="false"。例如:
 <item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/action_settings"
    android:visible="false"

    />

1

当调用方法 onCreateOptionsMenu 时,只需返回 false。

示例:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (!showToolbarMenu)
        return false;
    getMenuInflater().inflate(R.menu.main_activity, menu);
    return super.onCreateOptionsMenu(menu);
}

如果你在 onCreateOptionsMenu() 的开头返回 false,那么你会在那里添加菜单项吗? - CoolMind

0
不要实现 onCreateOptionsMenu(Menu menu) 方法。如果你非要这么做,也不要在这个方法中使用 getMenuInflater().inflate(R.menu.main, menu); 这一行代码,因为它会在溢出按钮中填充在资源文件 R.menu.main 中声明的菜单。

0
使用命令invalidateOptionsMenu();即可解决您的问题。

请考虑添加更多细节,说明为什么这是正确的答案。 - David L
如果当前片段或活动没有覆盖onCreateOptionsMenu,则此方法有效,因为它会强制系统尝试重新填充菜单。如果找不到要显示的菜单,则会隐藏该图标。 - Nicolò Parolini

0

这个方法对我有用,我只是删除了这一行代码:getMenuInflater().inflate(R.menu.main_activity, menu);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接