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

АвторScott Main

До появления Honeycomb (Android 3.0) все Android устройства имели кнопку "меню" под экраном. Разработчики могли использовать ее по своему усмотрению, интерфейсы многих приложений были выстроены именно вокруг этой кнопки. В ориентированном на планшеты Honeycomb был сделан шаг в сторону отказа от механических (и сенсорных) кнопок, в связи с этим, в третьей версии Android появился класс ActionBar, который позволял дать пользователю быстрый доступ к настройкам приложения через специальную панель, называемую action bar. По мнению разработчиков Google будущее за Action Bar-ом и программисты должны отказаться от использования кнопки "меню". В настоящее время на рынке доминируют смартфоны с механической или сенсорной кнопкой под экраном, но с появлением Ice Cream Sandwich ситуация может резко измениться.  Вам, как разработчику, важно заранее подготовиться к появлению таких устройств, и использовать концепцию Action bar уже сегодня.

На первый взгляд может показаться, что использование Action Bar-а вызовет проблемы при разработке программ для Android 2.x, в котором эта панель еще не была реализована. Однако здесь нет проблемы. Никто не запрещает Вам продолжать использовать кнопку "меню" на тех устройствах, где она присутствует, добавление же Action Bar-а потребует от вас написания всего нескольких строк кода.


ActionBar в Android OS

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

Окончательный отказ от меню настроек в Android

Недостаточно просто отказаться от использования кнопки "меню", нужно полностью выкинуть эту концепцию из своей головы. Не создавайте меню, создайте все необходимые кнопки непосредственно внутри деятельностей (activity). Если какие-то действия не помещаются на панель, вынесите их в дополнительное выпадающее меню (action overflow). На приведенной картинке показан action bar с кнопкой для поиска и дополнительное меню с правой стороны панели.

Если Ваше приложение создано под старую версию андроида (в которой традиционно используется меню), то при запуске на Android 3 планшете в нижней части экрана будет отображаться панель, эмулирующая три кнопки, существующие на телефонах второй ветки.

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

Action overflow button

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

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

  • Если Вы установили в minSdkVersion или targetSdkVersion значение больше 11, то система не добавляет эту кнопку.
  • С другой стороны, система создает эту кнопку, когда Вы запускаете приложение на Android 3.0 и выше.
  • Единственное исключение: когда Вы установите minSdkVersion в  10 или ниже; targetSdkVersion в 11, 12 или 13, и не будете использовать ActionBar, система добавит эту кнопку на телефонах (не планшетах) под управлением Android 4.0 и выше. В основе этого исключения лежит следующая идея: если Вы разрабатываете приложение одновременно для телефонов второй ветки и для планшетов третьей, то Вы предполагаете, что у телефонов должна быть кнопка меню, а у планшетов ее нет.


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

Переход к концепции action bar-а

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

Добавьте showAsAction="ifRoom" в теги <item> элементов, которые вы хотите поместить в action bar. Если вы не уверены, какой из элементов стоит включать в Action Bar, обратитесь кAndroid Design’s Action Bar guide.

Чтобы сделать восприятие вашей программы более целостным, рекомендуем Вам использовать в качестве иконок для Action bar-а иконки отAndroid UX Team. Архивприлагается.

Как удалить Action Bar из Android приложения


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

Если вы хотите использовать эти схемы, но сохранить обратную совместимость, можете использовать систему управления ресурсами, чтобы установить разные темы для разных версий платформ. Более подробно эта тема раскрыта <a>здесь</a>. Вам понадобится создать собственную тему, которая будет наследовать темы различных платформ в зависимости от текущей версии.

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

<application android:theme="@style/NoActionBar">

(или для конкретной деятельности в теге <activity>).

Для устройств, работающих на Android 2, включите следующую тему в res/values/themes.xml.

<resources>
    <style name="NoActionBar" parent="@android:style/Theme">
        <!-- Наследование стандартной темы Android 2 (без action bar) -->
    </style>
</resources>

Для Honeycomb включите следующую тему в res/values-v11/themes.xml.

<resources>
    <style name="NoActionBar" parent="@android:style/Theme.Holo.NoActionBar">
        <!-- Наследует тему Holo без action bar -->
    </style>
</resources>

При запуске в зависимости от версии API система выберет подходящую тему.

Заключение

Повторим тезисно ключевые идеи и моменты статьи:

  • На новых Android устройствах может отсутствовать кнопка "menu", поэтому при разработке программ лучше вообще отказаться от ее использования.
  • Установите targetSdkVersion = 14 и протестируйте свое приложение на Android 4.0.
  • Добавьте тег showAsAction="ifRoom" в <item> элемент меню, если хотите, чтобы он автоматически попал на панель action bar.
  • Если в Вашем приложении не используется ActionBar, Вы можете убрать его, воспользовавшись темами Theme.Holo.NoActionBar и Theme.DeviceDefault.NoActionBar.


Дополнительную информацию по проектированию Action Bar можно найти в"Android Design’s Action Bar guide". Что касается программирования, посмотрите этот документ:"Action Bar developer guide".


Оригинал:Scott Main, "Say Goodbye to the Menu Button"
Перевод: Александр Ледков




Наши соцсети

Подписаться Facebook Подписаться Вконтакте Подписаться Twitter Подписаться Google Подписаться Telegram

Популярное

Ссылки

Новости [1] [2] [3]... Android/ iOS/ J2ME[1] [2] [3]) Android / Архив

Рейтинг@Mail.ru Яндекс.Метрика
MobiLab.ru © 2005-2018
При использовании материалов сайта ссылка на www.mobilab.ru обязательна