2014-12-17 2 views
2

Android에서 하드웨어 메뉴 버튼의 동작을 재정 의하여 액션 바의 오버 플로우 메뉴를 열려고합니다.하드웨어 메뉴 버튼으로 오버플로 메뉴 열기

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() 메뉴를 여는 대신 openOptionsMenu()에 false를 돌려 android.support.v7.internal.app.WindowDecorActionBar의 인스턴스를 반환 것으로 보인다.

다른 방법이 있나요? 오버플로 아이콘을 직접 클릭하면 어떨까요? 하지만 어떻게 접근 할 수 있습니까?

답변

0

게시 한 지 오래되었지만 해결 방법을 찾지 못했을 때를 대비하여 내 경험을 공유했습니다. 사실

내가 같은 동작을 찾고 있었다

(당신이 전보 처럼 뭔가를 오버 플로우 아이콘을 터치 할 때 메뉴 키를 누르고 메뉴가없는 화면의 하단에있는 작업 표시 줄에 나타납니다, 정확히 같은)

나는이 같은 onKeyDownonKeyUp 메소드를 오버라이드 (override) :

@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); 
    } 
} 

나는 또한 내가 onCreate 방법에 내 작업 표시 줄로 android.support.v7.widget.Toolbar을 설정할 수 있습니다, 코드가 자명이라고 생각 :

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

참고 : 사실 위에서 언급 한 표현 solution가 (권장되지 않는 이유 ? 일관성 부족) 나는 와 같은 것을 android.support.v7.widget.Toolbar, 사용하는 것이 좋습니다 공백 Activityiy 템플릿 그 안드로이드 스튜디오 당신을 위해 생성됩니다. (코드, 테마 및 레이아웃을주의 깊게 살펴보십시오)