如何在ICS手机上禁用/隐藏三个点指示器(选项菜单指示器)

50

如何在没有菜单按钮的ICS手机上禁用/隐藏三点指示器(选项菜单指示器)?

我在清单文件中将应用程序运行为<uses-sdk android:minSdkVersion="5"/>,代码已经编译为4.0。三点指示器出现在每个屏幕上。

例如,在首选项活动中,我不想显示三点指示器,因为它没有任何菜单选项。

在清单文件中添加android:targetSdkVersion="14"可以解决问题。但是只想在首选项活动中隐藏/删除此三个点按钮,而不是在所有屏幕上都隐藏/删除。


如果你还没有阅读过的话,你绝对应该阅读一下 http://android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html ... - Mike Ellery
2
是的,我已经了解了。但是为了短期内支持用户,我仍然想在ICS手机上使用溢出按钮,而不是实现操作栏。似乎没有办法在某些屏幕上移除溢出按钮,除非在清单中使用"android:targetSdkVersion="14""属性。在首选项活动中,即使没有选项,溢出按钮也会显示。 - Subba
@user1198982,你有没有找到解决这个问题的方法?我也想在没有选项时将其删除。 - MikeIsrael
正确答案在这里: https://dev59.com/uGMm5IYBdhLWcg3wDbmo - user3817420
19个回答

34

在首选项的片段中,用以下代码覆盖onPrepareOptionsMenu()方法:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem item= menu.findItem(R.id.menu_settings);
    item.setVisible(false);
    super.onPrepareOptionsMenu(menu);
    return true;
}
如果你有多个项目,请将所有项目的可见性标志设置为false, 并在onCreate命令中添加setHasOptionsMenu(true)命令。 当你将所有项目的可见性设置为false时,菜单将消失。
在Activity上,唯一的区别是onPrepareOptionsMenu是布尔类型,并且无需在创建时添加setHasOptionsMenu(true)命令。

12
对我而言,它应该是 R.id.action_settings 而不是 R.id.menu_settings - Aman Deep Gautam

27

我刚刚删除了这个方法:

@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    getSupportMenuInflater().inflate(R.menu.main, menu);
    return true;
}

那个三点菜单就会消失 (:


希望这有所帮助。


1
如果您正在使用操作栏来放置其他图标,那么这种方法将不起作用,因为它会禁用操作栏中的所有图标。 - Azurespot
如果您想在此工具栏上使用其他按钮,请不要删除整个方法,只需在下面注释掉这个语句: //getSupportMenuInflater().inflate(R.menu.main, menu); - sifr_dot_in

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

9
没有办法单独显示/隐藏活动中的“三点”菜单指示符。您只能通过在清单文件中指定android:targetSdkVersion="14"(或更高版本),仅为整个应用程序隐藏此菜单指示器。
然而,如果活动继承自本地android.preference.PreferenceActivity类,则此菜单指示符不会显示在首选项活动上。我在我的一些应用程序中实现了这种情况,并且它完美地工作。
我假设您正在使用某些自定义首选项实现,而不是从PreferenceActivity扩展。Android Dev Team建议始终在应用程序中为任何首选项使用PreferenceActivity。

4
更换SDK可能不是答案,我想。有时候,您应该使用特定的SDK。 - alicanbatur

6

很抱歉来晚了,我试图删除所有菜单项和三个点(选项菜单指示器),我的做法与此处给出的解决方案不同,我很惊讶没有人告诉过它。 有一个可设置为false的可见性标签,不需要更改活动中的代码 visibility=false 就可以搞定。

在res / menu /..中。

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

适用于我。 - Saiful Islam Sajib

5

res/menu/main.xml中删除此项

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

此外:不要添加一个具有showAsAction="never"的项目-这将避免出现点。如果你有更多的项目不能同时显示,那么点会再次出现(它们是标记为ifRoom的项目)。

你能否更详细地说明你在这里试图表达什么?不清楚这如何回答问题。 - Codeman
这是一个不错的解决方案。很惊讶它没有更多的赞。对我来说,setvisible(false)的解决方案并没有起作用。您还可以根据需要添加其他操作项目。 - everydayapps

5

覆盖方法时,记得不要调用super并返回false。

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

4

下面的代码适用于我的应用。在三星Galaxy S4(Android 4.3)和Nexus 4(Android 4.2)上尝试过:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem item= menu.findItem(R.id.action_settings);
    item.setVisible(false);
    return true;
}

但是这样做会显示菜单图标,当您点击两次时它会消失,对吗?还是在活动加载时根本不会出现? - NinjaCoder

3
for hiding 3 dots in actionbar/ toolbar

 public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_dash_board_drawer, menu);
        return false;  //for visible 3 dots change to true, hiding false
    }

运行得非常好 :D - Ricardo F.

2
我刚刚排除了“onCreateOptionsMenu”方法:
@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    //Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_planos, menu);
    return true;
}

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