Как обнаружить событие нажатия кнопки меню?

#android #android-activity

#Android #android-активность

Вопрос:

 @Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    Toast.makeText(MainTabActivity.this, "On key up ", Toast.LENGTH_LONG).show();
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        // ........
        Toast.makeText(MainTabActivity.this, "On key up ", Toast.LENGTH_LONG).show();
        return true;
    }
    return true;
}
  

я работаю в Tabactivity, я хочу обнаружить событие, когда произойдет событие onclick на кнопке меню.я использую приведенный выше код, но он не работает

Ответ №1:

Вам нужно переопределить onKeyDown. Вы используете onKeyUp.

 @Override
public boolean onKeyDown(int keycode, KeyEvent e) 
{
    switch(keycode) 
    {
        case KeyEvent.KEYCODE_MENU:
            doSomething();
            return true;
    }

    return super.onKeyDown(keycode, e);
}
  

Ответ №2:

 public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        Toast.makeText(this, "On key up ", Toast.LENGTH_LONG).show();
        return true;
    }
    return super.onKeyDown(keyCode, event); 
} 
  

Попробуйте этот код, у меня он работает

Ответ №3:

Вы забыли вызвать super вызов onKeyDown события —

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

Ответ №4:

Используйте onKeyDown для обнаружения события нажатия кнопки.

 public boolean onKeyDown(int keyCode, KeyEvent event) {        
     if (keyCode == KeyEvent.KEYCODE_MENU) {         
        //do your work      
        return true;      
    }       
    return super.onKeyDown(keyCode, event);   
} 
  

Ответ №5:

Попробуйте приведенный ниже код, он работает…

 InnerRecevierM innerReceiver;
IntentFilter intentFilter;

@Override
    protected void onCreate(Bundle savedInstanceState) {
    ...
    innerReceiver = new InnerRecevierM();
        intentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        registerReceiver(innerReceiver, intentFilter);
}

class InnerRecevierM extends BroadcastReceiver {

        final String SYSTEM_DIALOG_REASON_KEY = "reason";
        final String SYSTEM_DIALOG_REASON_MENU_KEY = "recentapps";

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();

            if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
                String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);

                if (reason != null) {
                    if (reason.equals(SYSTEM_DIALOG_REASON_MENU_KEY)) {
                        Toast.makeText(MainActivity.this, "Menu Button Pressed", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        }
    }

@Override
protected void onDestroy() {
    super.onDestroy();
    if(innerReceiver != null) {
        unregisterReceiver(innerReceiver);
                innerReceiver = null;
    }
    }