Отображение кнопки меню на ICS с сохранением android: targetSdkVersion будет 14 - PullRequest
5 голосов
/ 14 декабря 2011

У меня есть приложение с полноэкранным режимом просмотра, в котором для отображения параметров используется кнопка меню. Я установил для android: targetSdkVersion значение 14, чтобы вся тема приложения выглядела как собственное приложение ICS.

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

Есть ли способ сохранить кнопку обычного меню в полноэкранном режиме на ICS?

Ответы [ 2 ]

2 голосов
/ 01 сентября 2012

Есть способ, если ты чувствуешь себя комфортно с хакерством и рефлексией. Даниэль Лью упоминает об этом в своем блоге . Он отмечает, соответственно, что это действительно не предназначено для использования с производственным кодом. Разработчики Android могут лишиться этой возможности в будущем.

public static void addLegacyOverflowButton(Window window) {
  if (window.peekDecorView() == null) {
    throw new RuntimeException("Must call addLegacyOverflowButton() after setContentView()");
  }

  try {
    window.addFlags(WindowManager.LayoutParams.class.getField("FLAG_NEEDS_MENU_KEY").getInt(null));
  }
  catch (NoSuchFieldException e) {
    // Ignore since this field won't exist in most versions of Android
  }
  catch (IllegalAccessException e) {
    Log.w(TAG, "Could not access FLAG_NEEDS_MENU_KEY in addLegacyOverflowButton()", e);
  }
}
2 голосов
/ 14 декабря 2011

Полагаю, нет способа показать только небольшую часть панели действий ICS - по крайней мере, это будет выглядеть странно. Лучший способ для вас - создать где-нибудь в вашем приложении «кнопку меню». Если вы хотите скрыть эту кнопку для телефонов с аппаратной кнопкой меню, есть возможность проверить версию SDK: android.os.Build.VERSION.SDK_INT

...