2012-12-20 4 views
1

Honeycomb 또는 ICS 태블릿에 작업 표시 줄없이 옵션 메뉴를 어떻게 표시합니까?Honeycomb에서 작업 표시 줄없이 옵션 메뉴를 표시하는 방법은 무엇입니까?

일부 재생을 마친 후에는 아무 동작 막대도없고 targetsdkversion> = 11이면 Honeycomb 기기에 옵션 메뉴가없는 것 같습니다. 귀하의 테마가 Theme.Holo.NoActionBar 인 경우에도. targetsdkversion> = 11 인 Honeycomb에서 옵션 메뉴를 표시하는 유일한 방법은 작업 표시 줄이있는 테마로 onCreate에 숨기는 것입니다. Honeycomb에서 이전 패널 메뉴를 표시하는 유일한 방법은 targetsdkversion < = 10입니다. 요약

, 벌집에서 , 당신은, 작업 표시 줄이없는 당신이 11 이하로 목표로하지 않는 한이 벌레처럼 보이는 경우 옵션 메뉴가 할 수있는 방법이 없습니다. ICS와 그 이상에서는 에 액션 바가 실제로 있는지 여부와 상관없이 원하는 옵션 메뉴를 가질 수 있습니다.

본래의 목표는 Honeycomb 이상에서 이전 스타일의 패널 메뉴와 새로운 Action Bar 메뉴 (여러 활동에서)를 모두 사용할 수 있고 Honeycomb 아래의 패널 메뉴를 사용하는 것이 었습니다.

큰 메뉴 버튼을 사용해야하는 경우 하나의 활동이 있지만, 앱의 나머지 부분은 완벽하게 홀로 남을 수 있습니다.

이것을 달성하기 위해 나는 을 사용하는이 활동을 제외한 Theme.Holo (api 11+ 용)을 어디에서나 사용했습니다. 나는 android:minSdkVersion="5" android:targetSdkVersion="14"을 가지고 있으므로 지원 메뉴 키가 표시되지 않으므로 일부 HTC 휴대 전화에서는 화면 공간이 낭비되지 않습니다. 기기에 하드웨어 메뉴 버튼이없는 경우 패널 메뉴를 팝업하기위한 버튼을 제공합니다 (http://developer.android.com/reference/android/view/ViewConfiguration.html#hasPermanentMenuKey())

문제는 Honeycomb 태블릿 (Galaxy Tab, Honeycomb 3.2). 작업 표시 줄의 정상적인 작업은 정상적으로 작동하지만 메뉴 단추 (UI에서 제공 한 단추)를 누르면 특별한 작업이 수행되지 않습니다.

적어도 두 개의 ICS 전화와 에뮬레이터에서 제대로 작동합니다 (하드웨어 메뉴 키가 있거나 없음). 이 하나의 활동을 제외한 모든 곳의 일반적인 작업 표시 줄 메뉴는 큰 패널 메뉴를 제공합니다.

그래서 해결책은 무엇입니까? 이것은 갤럭시 탭이나 허니컴에 문제가 있습니까? 패널 메뉴를 제공하기 위해 사용해야하는 테마가 다른가요?

편집 : 더 많은 테스트를 위해 ICS 타블렛을 얻었는데 패널 메뉴가 나타나지 않는 것으로 나타났습니다. 똑같은 Android 버전의 동일한 앱에서 휴대 전화에는 패널 메뉴가 표시되고 타블렛에는 아무 것도 표시되지 않습니다.. 응?

답변

2

아래는 Honeycomb 이상 Android 버전의 PhoneWindow 시스템 클래스에서 발췌 한 것입니다. 그것은 안드로이드 목표 버전 및 장치 화면 크기에 대한 정말 하드 코드 검사입니다. 이 점검을 피할 수 있습니까? 메뉴가 정상적으로 표시됩니다. 그러나 그러한 가능성은 없습니다. 그래서 목표 SDK가 10 이상으로 설정된 Honeycomb + 기기에 옵션 메뉴를 표시하는 것은 불가능합니다. 액션 바 메뉴가 표시 될 수있는 경우 이전에 표시되고이 코드에 도달하지 않는 것은 재미 있습니다. 이 때문에 코드 위의 주석은 특히 유용합니다.

// Don't open an options panel for honeycomb apps on xlarge devices. 
// (The app should be using an action bar for menu items.) 
if (st.featureId == FEATURE_OPTIONS_PANEL) { 
    Context context = getContext(); 
    Configuration config = context.getResources().getConfiguration(); 
    boolean isXLarge = (config.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 
       Configuration.SCREENLAYOUT_SIZE_XLARGE; 
    boolean isHoneycombApp = context.getApplicationInfo().targetSdkVersion >= 
      android.os.Build.VERSION_CODES.HONEYCOMB; 

    if (isXLarge && isHoneycombApp) { 
     return; 
    } 
} 
+0

하드 라이프 ...... ...... – Renetik

관련 문제