안드로이드 액션바에 오버플로 메뉴 강제하기

안드로이드에 하드웨어 메뉴키가 있는 경우에는 메뉴가 액션바의 오른쪽 끝에 오버플로 메뉴가 뜨지 않고 대신에 메뉴키를 눌렀을 때에만 화면의 아래쪽에서 빼꼼히 뜬다. 이건 디자인의 통일성에 있어서 좀 문제가 있다.
아래의 코드를 onCreate() 메서드 안에 삽입하면 하드웨어 메뉴키가 있는 경우에도 액션바에 오버플로 메뉴 형태로 표시되게 강제할 수 있다. 물론 메뉴키를 누르면 오버플로 버튼을 클릭한 것처럼 화면의 우측상단에 메뉴 목록이 나타난다.


// 하드웨어 메뉴키가 있더라도 액션바의 오버플로 메뉴를 사용하도록 강제한다.
try {
  ViewConfiguration config = ViewConfiguration. get( this);
  Field menuKeyField = ViewConfiguration.class .getDeclaredField( "sHasPermanentMenuKey");
  if (menuKeyField != null) {
     menuKeyField.setAccessible( true );
     menuKeyField.setBoolean(config, false );
  }
catch (Exception ex) {
  ;
}


단, 기본 액션바에서만 되고, 콤팻이나 셜록 액션바에서는 안되는 듯 하다.
(http://stackoverflow.com/a/11438245)

댓글

이 블로그의 인기 게시물

자바 암호화 확장 (JCE) 관련 자바 1.8.0_151 이후 변경 사항

좌표 변환: 회전 이동

HTTP POST