Подтвердить что ты не робот

Обработка отсутствующей кнопки MENU в новых версиях Android (3.x и выше)

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

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

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

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

this.openOptionsMenu();

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

Более точно, производители устройств должны иметь внеэкранные кнопки или нет для таких вещей, как MENU. Указание документа для определения совместимости для Android 4.0:

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

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

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

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

Отбросьте меню параметров целиком и перейдите к использованию только контекстных меню?

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

Ответ 4

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

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

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

Кажется, что кнопка "Меню" возвращается, и я хотел нарушить прежний барьер, хотя только 1% моих пользователей используют ICS.

Ответ 5

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

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

Ответ 6

Я добавил специальную логику для выпусков 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"