Android: программно определить, если устройство имеет кнопку аппаратного меню

в настоящее время я борюсь с этой проблемой. Мне нужно проверить, есть ли на устройстве, где установлено приложение, аппаратная клавиша меню. Поскольку он не существует на некоторых устройствах, таких как Galaxy Nexus, я показываю его непосредственно в пользовательском интерфейсе в этом случае.

Я уже посмотрел на PackageManager.hasSystemFeature (), но не нашел там ничего полезного.

кто-нибудь уже делал это?

6 ответов


ViewConfiguration.get(context).hasPermanentMenuKey()

посмотреть ViewConfiguration#hasPermanentMenuKey() для получения дополнительной информации. Обратите внимание, что это доступно только для уровня API 14+ (Android 4.0 Ice Cream Sandwich или новее).


if(Build.VERSION.SDK_INT <= 10 || (Build.VERSION.SDK_INT >= 14 &&    
                              ViewConfiguration.get(this).hasPermanentMenuKey()))
{
   // menu key is present
}
else
{
  //No menu key
}

даже на устройствах под управлением Honeycomb и позже, система будет поставлять "кнопку Меню" для приложений, написанных для 2.x версии Android. Только это называется "меню". Поэтому нет смысла проверять, будет ли такая кнопка или нет-он будет там, если это необходимо.

в качестве общего руководства вы должны проверить конкретную функциональность, а не смотреть на номера версий системы/API. Используйте класс ActionBar, если он доступен, в противном случае 2.x меню "Параметры".

вы смотрели действие-бар учебник Google? Это проясняет, что вы должны делать.


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


keysoft qualifier используется для обнаружения аппаратной клавиатуры, а не панели навигации.

эта статья решает он:

Проверьте навигационную панель


Если вам нужен классификатор ресурсов, что может быть так, поскольку вы хотите дифференцировать UIs, используйте keyssoft квалификатор ресурсов.