2014-12-17 3 views
2

Я пытаюсь переопределить поведение кнопки меню аппаратного обеспечения на Android, чтобы открыть меню переполнения в ActionBar.Открытое меню переполнения с кнопкой меню оборудования

Благодаря this question, я могу отображать меню переполнения в ActionBar. Но когда я нажимаю кнопку аппаратного меню, вместо этого открывается меню «нормальное» (внизу экрана) меню переполнения.

Я попытался изменить это, переопределив onKeyDown(int, KeyEvent) в моем Activity, но он не работает.

if (keyCode == KeyEvent.KEYCODE_MENU) { 
    // I am extending android.support.v7.app.ActionBarActivity 
    this.getSupportActionBar().openOptionsMenu(); 

    return true; 
} 

После исследования, кажется, что getSupportActionBar() возвращает экземпляр android.support.v7.internal.app.WindowDecorActionBar, что возвращение ложным в openOptionsMenu() вместо того, чтобы открыть меню.

Есть ли другой способ достичь этого? Может быть, вызвать прямой щелчок на значке переполнения? Но как я могу получить к нему доступ?

ответ

0

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

На самом деле я искал такое же поведение (при нажатии клавиши меню и на панели действий появится меню, а не в нижней части экрана, точно как при прикосновении значка переполнения, что-то вроде Телеграммы)

я переопределить onKeyDown и onKeyUp методы, как это:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
     case KeyEvent.KEYCODE_MENU: 
      //Apparently does nothing but prevents menu pop up 
      //at bottom of the screen 
      return true; 
     default: 
      return super.onKeyDown(keyCode, event); 
    } 
} 

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
     case KeyEvent.KEYCODE_MENU: 
      getSupportActionBar().openOptionsMenu(); 
      return true; 
     default: 
      return super.onKeyUp(keyCode, event); 
    } 
} 

Я считаю, что код сами объяснительный, также обратите внимание, что я установил android.support.v7.widget.Toolbar как мои действия бар в onCreate методе:

toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 

Примечание: На самом деле представлена ​​solution вы упоминали выше, не рекомендуется (почему? отсутствие согласованности) Я рекомендую использовать android.support.v7.widget.Toolbar, что-то вроде Blank Activitiy шаблон, который Android Studio создает для вас. (внимательно изучите код, темы и макеты)

Смежные вопросы