Попрощайтесь с кнопкой меню


До Android 3.0 (Honeycomb) все Android устройства имели специальную кнопку меню. Как разработчик, вы могли использовать ее, чтобы отобразить пользователю выбор некоторых функций приложения, часто используя активити, встроенные в меню настроек. В Honeycomb была удалена зависимость от физической кнопки и введен класс ActionBar как стандартное решение, для отображения и быстрого вызова пользовательских параметров. Для того чтобы обеспечить наиболее интуитивно понятный и последовательный интерфейс в ваших приложениях, вам нужно переделать свои проекты, отказавшись от использования кнопки меню в пользу использования панели действий. Это не новая концепция – шаблон панели действий был в Android еще до Honeycomb, но с появлением большого количества устройств с Ice Cream Sandwich, важно, что бы вы начинали переходить на использование конструкции панели действий в целях обеспечения последовательного интерфейса Android.

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

Если бы мне пришлось сжать этот пост в одно предложение, это было бы: Установить targetSdkVersion равным 14 и, если вы используете меню опций, поместить несколько действий в панель действий, использовав showAsAction="ifRoom".

Не называйте это меню

image01Не только ваши приложения должны прекратить полагаться на аппаратную кнопку меню, но и вы так же должны прекратить думать об использовании кнопки меню в своих активити. Ваши активити должны предоставить кнопки для наиболее важных для пользователя действий непосредственно в панели действий (или в другом месте на экране). Те, что не помещаются в панели действий в конечном итоге помещаются в избыточные действия (action overflow).

На скриншоте видно кнопку поиска и избыточные действия в правой части панели действий.

Даже если ваше приложение написано с поддержкой версий Android древнее 3.0 (в которой приложения традиционно используют панель меню для отображения пользовательских параметров/действий), то когда оно работает на Android 3.0 и выше, в нем нет никаких кнопок меню. Кнопка, которая появляется в системной/навигационной панели представляет собой action overflow для старых приложений, показывает действия и пользовательские опции, которые “выходят за пределы экрана”.

Эта терминология может показаться странной, но название избыточные действия (action overflow) способствует другому способу мышления. Вместо того чтобы думать о меню, которое служит в качестве всеобъемлющего контейнера различных пользовательских опций, вы должны больше думать о том, какие из нужных пользователю параметров нужно отобразить на экране в виде действий. Те, которые не должны быть на экране, могут выходить за пределы экрана. Пользователи могут увидеть избыточные действия и другие опции, касаясь кнопки избыточных действий, которая появляется на экране рядом с кнопками действий.

Кнопка избыточных действий в старых приложениях

Если вы уже разрабатывали приложение, поддерживающее Android 2.3 и ниже, то вы могли заметить, что, когда оно работает на устройстве без аппаратной кнопки меню (например Honeycomb планшеты или Galaxy Nexus), система добавляет кнопку избыточных действий рядом с системой навигации.
image00Эта совместимость поведения (для старых приложений) призвана обеспечить приложениям, использующим кнопку меню, нормальное функционирование. Тем не менее, кнопка меню не обеспечивает идеального взаимодействия с пользователем. На самом деле, в приложениях, которые не используют опции меню, эта кнопка избыточных действий ничего не делает и вводит пользователей в заблуждение своим присутствием. Поэтому нужно обновлять свои старые приложения и удалять кнопку избыточных действий из панели навигации при запуске на Android 3.0+ и начинать использовать панель действий. Это все можно сделать не нарушая обратной совместимости с устройствами, которые уже поддерживаются вашими приложениями.

Если приложение работает на устройстве без кнопки меню, система решает, добавить ли кнопку избыточных действий на панель навигации на основе объявленного уровня API, который должен поддерживаться, в элементе <uses-sdk> манифеста. Логика сводится к:

  • Если вы установите minSdkVersion или targetSdkVersion >= 11, то система не будет добавлять кнопку избыточных действий.
  • В противном случае система будет добавлять кнопку избыточных действий при работе на Android 3.0 или выше.
  • Единственное исключение – это если вы установите minSdkVersion <= 11, targetSdkVersion равным 11, 12 или 13 и не будете использовать ActionBar, то система будет добавлять кнопку избыточных действий при запуске вашего приложения на телефоне с Android 4.0 и выше.

Это исключение может быть немного запутанным, но оно основано на том, что если разработанное вами приложение поддерживает телефоны до Honeycomb и Honeycomb планшеты, оно, вероятно, ожидает, что в телефоне есть кнопка меню (но в тоже время оно поддерживает и планшеты, в которых такой кнопки нет).

Таким образом, для обеспечения того, чтобы кнопка избыточных действий никогда не появлялась рядом с системой навигации, вы должны установить targetSdkVersion равным 14. (Вы можете установить значение minSdkVersion равным чему-то гораздо меньшему, чтобы поддерживать старые устройства.)

Переход на использование панели действий

Если у вас есть активити, использующие меню (они реализуют onCreateOptionsMenu()), когда один раз кнопка избыточных действий исчезает из системной/навигационной панели (потому что вы установили targetSdkVersion равным 14), необходимо предоставить альтернативные средства пользователю для получения доступа к действиям активити и другим опциям. К счастью, в системе есть такое средство – панель действий.

Добавьте showAsAction="ifRoom", в элемент <item>, представляющий собой наиболее важное действие активити, чтобы показать его в панели действий (при наличии свободного места, естественно). Прочитать о распределении приоритетов появления действий в панели действий можно в Android Design’s в разделе Action Bar guide.

icon_samples

Для дальнейшего обеспечения целостности работы пользователей с панелью действий, мы рекомендуем использовать пиктограммы, созданные коллективом Android UX. Доступные пиктограммы представляют обычные действия пользователя (такие как обновление, удаление, подключение, звездочка, Share и другие) и предназначены для светлых и темных Holo тем.Вот они!

 

Если эти значки не удовлетворяют вашим потребностям и вам нужно создать свои собственные, то вы должны следовать руководству Iconography design guide.

Удаление панели действий

Если вам не нужна панель действий, вы можете удалить ее из всего приложения или из отдельных активити. Это подходит для приложений, которые никогда не используют опции меню или для которых нет надобности в панели действий (например игры). Вы можете удалить панель действий использовав тему, такую как Theme.Holo.NoActionBar илиTheme.DeviceDefault.NoActionBar.

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

Например, вот как вы можете объявить собственную тему для приложения:

Или вы можете объявить тему для отдельных элементов <activity>.

Устройства до Honeycomb включают следующую тему в res/values/themes.xml, которая наследует стандартную тему платформы:

Для Honeycomb и выше, включают следующую тему в res/values-v11/themes.xml, которая наследует NoActionBar тему:

Во время выполнения система применяет соответствующую версию темы NoActionBar на основе версии API системы.

Резюме

  • Android больше не требует кнопки меню, в некоторые устройствах ее уже нет, и вам нужно уходить от ее использования.
  • Установить targetSdkVersion равным 14, а затем протестировать приложение на Android 4.0
  • Добавить showAsAction="ifRoom" к пунктам меню, которые нужно перенести в панель действий.
  • Если ActionBar не нужен в вашем приложении, вы можете удалить его использовав Theme.Holo.NoActionBar илиTheme.DeviceDefault.NoActionBar.

Информацию о том, как следует разрабатывать панель действий можно найти в Android Design’s в разделе Action Bar guide. Более подробная информация о реализации панели действий также доступна в Action Bar developer guide.

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *