Обработка недостающей кнопки MENU в новых версиях Android (3.x и выше) - PullRequest
39 голосов
/ 08 января 2012

Я фанат кнопки меню, используемой в Android <3.0, так как она была очень полезна для моих игровых приложений - она ​​позволяла мне использовать важную, но не относящуюся к игре функциональность (сохранение игры, ссылки на справочную информацию) и размещать еегде-то, где он не загромождал основной интерфейс игры, но все еще был легко доступен (меню опций). </p>

Такое использование клавиш стало проблемой с 3.0, потому что он убрал кнопку MENU и заменил ее наПанель действий.Панель действий действительно не подходит для игры, которая любит работать в полноэкранном режиме, так что это была настоящая боль.Нет панели действий - нет доступа к меню параметров.Тем не менее, я мог некоторое время игнорировать это, так как у меня было не так много пользователей на планшетах, и у меня не было времени, чтобы протестировать это.

Однако ICS делает это серьезной проблемой, так как кнопка MENUочевидно, не вернется.Теперь мне приходится сталкиваться не только с этими проблемами на планшетах, но и на телефонах.

Мое первоначальное решение этой проблемы состояло в простом размещении программной кнопки в моем графическом интерфейсе для замены жесткой кнопки MENU.

this.openOptionsMenu();

И все возвращается к идеальной работе в ICS.

Однако в Honeycomb это не работает.Вызов openOptionsMenu абсолютно ничего не делает, если у вас нет видимой панели действий.

Есть мысли о том, как с этим бороться?

  • Полагаю, я всегда мог вернуться к использованию TargetSDK <11 (тем самым заставляя ActionBar появляться на планшетах), но, насколько я вижу, это просто выдвигает проблему вбудущее, которое я бы предпочел не делать. </p>

  • Полностью отказаться от меню параметров и перейти только к использованию контекстных меню?[Пояснение: под этим я подразумеваю, что вместо открытия меню опций - я использую только контекстные меню, поскольку - по крайней мере, на данный момент - они работают на всех устройствах].

Заинтересованы в том, чтобы услышать, чтодругие, у которых были подобные проблемы со всем беспорядком Меню параметров / ActionBar, решили сделать.

Ответы [ 6 ]

19 голосов
/ 08 января 2012

Позвольте мне рассказать о другом сценарии, когда кнопка меню становится критической, даже если это не игра.

У меня в приложении есть собственные панели инструментов, которые в некоторой степени ведут себя как ActionBar. Ну, я сделал это, потому что мое приложение было выпущено с 1,5 SDK. В то время такого понятия не было. И чтобы приспособить для моих панелей инструментов, я скрываю строку заголовка по умолчанию. Но некоторые действия выполняются через функциональность меню.

Теперь, поскольку в Galaxy Nexus нет кнопки Меню, если вы не используете ActionBar, и мне больно, потому что мое приложение все еще поддерживает 1.5.

Ну, есть разные способы, но нет ничего легкого.

Тем не менее, единственное, что я могу придумать, - это предоставить пользователю все опции на моей панели инструментов, чтобы меню вообще не требовалось. Я могу сделать это, потому что у меня есть только два действия, которые не являются частью панели инструментов.

В вашей ситуации контекстное меню на кнопке не является плохим решением в игре, поскольку игра будет иметь только один контекст, в котором она работает, по сравнению с контекстным меню в элементах списка, где каждый элемент представляет собой отдельный контекст.

Кстати, если openOptionsMenu работает на ICS, и вы можете отказаться от HoneyComb через некоторое время (даже сейчас пользовательская база слишком низкая), тогда попробуйте дать оба меню в зависимости от версии .

РЕДАКТИРОВАТЬ: Есть еще один способ также получить кнопку MENU s / w на панели навигации ниже. Просто установите targetSdkVersion на значение меньше 11. Для более подробной информации Пожалуйста, прочитайте весь Soln.

2 голосов
/ 27 января 2012

И просто для того, чтобы поместить последний всплеск в общеизвестный гроб кнопки меню, Google взвешивает с последним прощанием:

http://android -developers.blogspot.com / 2012/01 /говорят, до свидания-к-меню-button.html

2 голосов
/ 08 января 2012

Однако ICS делает это серьезной проблемой, поскольку кнопка MENU явно не возвращается.

Точнее, производителям устройств решать, должны ли быть кнопки вне экрана.или не для таких вещей, как МЕНЮ.Цитирование документа определения совместимости для Android 4.0:

Функции «Домой», «Меню» и «Назад» имеют важное значение для парадигмы навигации Android.Реализации устройства ДОЛЖНЫ делать эти функции доступными пользователю во время работы приложений.Эти функции МОГУТ быть реализованы с помощью специальных физических кнопок (таких как механические или емкостные сенсорные кнопки) или МОГУТ быть реализованы с помощью специальных программных клавиш, жестов, сенсорной панели и т. Д.

Таким образом, вы не можете рассчитывать наесть кнопка MENU вне экрана, хотя вполне может быть и одна.

Есть мысли о том, как с этим справиться?

Напишите свое собственное "меню" какчасть вашего игрового интерфейса.Я не ожидал бы, что игра, которая думает, что ей нужен полный экран, чтобы использовать меню опций - на самом деле, я не помню, чтобы когда-либо видел игру, которая сделала это (хотя, по общему признанию, я не большой игрок игры),Все игры, в которые я играл, ничего не делают при нажатии кнопки MENU.Скорее, все, что может считаться «меню», реализовано непосредственно в игровом интерфейсе (например, кнопка, которая ведет к экрану, отформатированному в стиле интерфейса игры, который предлагает выбор действий).

Полностью уйти из меню параметров и перейти только к использованию контекстных меню?

Это было бы ужасно, поскольку пользователи не будут знать, где долго нажимать, чтобы вызватьменю.

0 голосов
/ 04 июля 2012

Я добавил специальную логику для выпусков 3.x.Только для этих выпусков я использую панель действий.

            if (Build.VERSION.SDK_INT == Build.VERSION_CODES.HONEYCOMB
             || Build.VERSION.SDK_INT == Build.VERSION_CODES.HONEYCOMB_MR1
             || Build.VERSION.SDK_INT == Build.VERSION_CODES.HONEYCOMB_MR2) {
                requestWindowFeature(Window.FEATURE_ACTION_BAR);        
            }
            else{
//              hide the status bar, do not use action bar         
                requestWindowFeature(Window.FEATURE_NO_TITLE);    
                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);               
            }

Для всех остальных выпусков я отображаю собственную кнопку меню и запускаю игру в полноэкранном режиме.Когда я нажимаю кнопку меню, я использую следующую строку кода, где «act» - текущая активность.

act.openOptionsMenu();

Как часть xml вашего меню, убедитесь, что такая строка установлена ​​для установки «showAsAction»."

showAsAction="ifRoom"
0 голосов
/ 28 января 2012

Отвечая на это недавнее сообщение в блоге, они, похоже, хотят, чтобы разработчики начали использовать Панели действий поверх меню, но это становится проблемой, если требуется поддержка API => 3.0 и API <3.0.Так что либо создайте пользовательскую панель действий, совместимую с API <3.0 (вы можете найти примеры в SDK), либо ... Я экспериментировал с прошлой неделей: </p>

У меня также была проблема, когда менюКнопка не появилась на моем планшете ICS, я полагаю, что в то время для targetSdk было установлено значение 11, поскольку я хотел реализовать ActionBar.Затем я установил minSdk на 3, а targetSdk на 4. Появились и панель действий, и кнопка переполнения меню.Так что сейчас это обходной путь (по крайней мере, для проекта, над которым я работаю).

0 голосов
/ 12 января 2012

Майкл, я оказался в точно такой же ситуации и решил ее, реализовав меню опций с помощью настраиваемого диалога.На ICS он выглядит лучше, чем устаревшее меню опций внизу.Он настроен следующим образом:

minSdkVersion = 8 targetSdkVersion = 14 Версия сборки SDK 8 (в настройках eclipse. Можно установить значение 14, но мне нравится безопасность типов, которую он обеспечивает)

Пользователи с API <10используйте кнопку жесткого меню и посмотрите стандартное меню параметров.Пользователи с API> = 10 видят трехточечный значок (меню переполнения) в приложении, а когда нажимают, получают мое диалоговое меню.Они также видят новый внешний вид ICS в настройках и т. Д.

Не похоже, что кнопка «Меню» возвращается, и я хотел преодолеть прежний барьер, хотя только <1% моих пользователей используют ICS. </p>

...