web-dev-qa-db-fra.com

Android: Détecter par programme si l'appareil a un bouton de menu matériel

Je suis actuellement aux prises avec ce problème. Je dois vérifier si l'appareil, où l'application est installée, possède une touche de menu matériel. Parce qu'il n'existe pas sur certains appareils comme le Galaxy Nexus, je le montre directement dans l'interface utilisateur dans ce cas.

J'ai déjà regardé PackageManager.hasSystemFeature (), mais je n'y ai rien trouvé d'utile.

Quelqu'un a-t-il déjà fait cela?

42
NiThDi
ViewConfiguration.get(context).hasPermanentMenuKey()

Voir ViewConfiguration#hasPermanentMenuKey() pour plus d'informations. Notez que cela n'est disponible que pour l'API niveau 14+ (Android 4.0 Sandwich à la crème glacée ou plus récent).

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

Même sur les appareils exécutant Honeycomb et versions ultérieures, le système fournira un "bouton Menu" pour les applications écrites pour les versions 2. x d'Android. Seulement, c'est ce qu'on appelle le "menu de débordement". Il n’est donc pas utile de vérifier s’il y aura un tel bouton ou non - il sera là si nécessaire.

En règle générale, vous devez vérifier les fonctionnalités spécifiques, pas regarder les numéros de version du système/API. Utilisez la classe ActionBar si elle est disponible, sinon revenez au menu d'options 2. x .

Avez-vous consulté didacticiel de la barre d'actions de Google ? Cela rend plus clair ce que vous devez faire.

3
Lawrence D'Oliveiro

Je pense qu'une solution possible et meilleure consiste à ajouter une propre barre d'action. Ainsi, chaque appareil peut le voir et vous n'avez pas à vérifier la configuration matérielle ou la version Api.

1
kinghomer

le qualificatif keysoft est utilisé pour détecter un clavier matériel et non la barre de navigation.

Cet article le résout:

Vérifiez la barre de navigation

1
Darren B