如何完全禁用安卓手机上的菜单按钮?

3

如果在我的应用程序加载内容时长按菜单按钮,它会停止加载并像按下返回键一样退出。不知何故。

我不希望菜单按钮这样操作,所以我的问题是:

如何完全禁用菜单按钮?我从不需要它出现在我的应用程序中,只想关闭它。

我尝试过:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event){

     if (keyCode == KeyEvent.KEYCODE_BACK){
        onBackPressed();
     }


    if (keyCode == KeyEvent.KEYCODE_MENU){
        return true;
    } 
    else{
        return super.onKeyDown(keyCode, event); 
    }

}

菜单按钮仍在工作...

任何帮助都将不胜感激!谢谢。


如果您使用ProgressDialog来下载数据,则将ProgressDialog可取消设置为true。然后您就不需要禁用返回菜单。 - Md Abdul Gafur
在一些三星手机上,长按菜单键被映射为搜索键。如果您的手机是三星手机,则返回true以获取搜索键。 - nandeesh
目前还没有任何进展,如果我长按菜单按钮,我的进度对话框就会被取消,我的应用程序也会崩溃。我真的需要一种方法来禁用这个愚蠢的菜单按钮,我不需要它,为什么我不能关闭它呢? - Adam Varhegyi
5个回答

10

如果您想要显示菜单,必须返回 true;如果返回 false,则不会显示菜单。

因此,我猜这样做会起作用:

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

如果我只想“禁用”它,而不是隐藏它,那么怎么办? - Darpan
从API-11开始,此方法已更改。 public void onPrepareOptionsMenu(Menu menu) - Bhavana Vadodariya
当子类化AppCompatActivity时,这种方法效果不佳。 - Nick Dowell

3
你必须返回false
@Override
public boolean onMenuOpened(final int featureId, final Menu menu) {
    super.onMenuOpened(featureId, menu);
    return false;
}

1
我已经尝试了所有的onKeyDown/onKeyUp/dispatchTouchEvent/onPreparedOptionsMenu方法,这是唯一对我有效的方法。 - user2968401
适用于AppCompatActivity。 - Nick Dowell

0
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
     return (keyCode == KeyEvent.KEYCODE_MENU ? true : super.onKeyDown(keyCode, event));
}

0

你发布的那个应该可以用,
还是试试这个,应该可以用

@Override  
public boolean onKeyDown(int keyCode, KeyEvent event) {  
     final int keyCode = event.getKeyCode();  
     if (keyCode == KeyEvent.KEYCODE_MENU){
         return true;
     } 

     return super.onKeyDown(keyCode, event); 
}

使用你的代码,我得到了“keyCode已经定义”的错误。 - Hayden Thring

0

我不得不禁用菜单按钮,我的做法是添加以下行:

public boolean dispatchKeyEvent(KeyEvent event) {
   return true;
}

代码的作用是告诉操作系统所有按键事件已经处理完毕,不需要再进行其他动作。请在onCreate方法之后添加此代码。


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