J'utilise appcompat dans mon application. Je veux que les éléments du menu s'affichent dans la barre d'action ou au moins le débordement (3 points) pour les afficher lorsqu'il n'y a pas de place. Il y a beaucoup d'espace sur la barre d'action, mais ils n'apparaissent toujours pas. Le flux de menu augmente à partir du bas et cela aussi uniquement lorsque vous appuyez sur le bouton de menu.
menu_activity.xml:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto" >
<item
Android:id="@+id/menu_lang"
Android:showAsAction="always"
Android:title="@string/menu_lang"
Android:icon="@Android:drawable/ic_input_lang"/>
</menu>
activité:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_activity, menu);
return true;
}
Ce post indique que cela ne fonctionne pas lorsque le bouton du menu matériel est présent. Mais d'autres applications peuvent afficher des éléments sur le même appareil. Donc, cette réponse semble être incorrecte. Quelqu'un peut-il m'aider à ce sujet?
Vous semblez utiliser le mauvais menu: votre fichier est nommé "menu_activity.xml" et vous gonflez le menu avec le Resource-Id: R.menu.reminder_menu
Le nom de la ressource du menu doit être le même que le nom du fichier, c'est-à-dire: R.menu.manu_activity
Essayez à nouveau avec ça - je suis tombé dessus aussi une fois et ça m'a rendu fou ...
Mise à jour Après avoir précisé que la partie ci-dessus était destinée à l'obscurcissement, veuillez vous assurer que:
showAsAction
, afin que la bibliothèque de compatibilité puisse les récupérer.Vous avez déjà défini l'espace de noms personnalisé ("app", dans la balise de menu). Vous devez modifier le Android:showAsAction
tag vers app:showAsAction
selon le Android guide.
Votre menu_activity.xml corrigé ressemblerait alors à ceci:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto" >
<item
Android:id="@+id/menu_lang"
app:showAsAction="always"
Android:title="@string/menu_lang"
Android:icon="@Android:drawable/ic_input_lang"/>
</menu>
La extension Android guide pour la barre d'action couvre ces nouveaux et méchants pièges ...
D'accord, je pense avoir trouvé une solution pour vous. Il s'appelle Overflow Menu et vous devez appeler la méthode ci-dessous dans votre méthode onCreate.
private void getOverflowMenu() {
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if(menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
} catch (Exception e) {
e.printStackTrace();
}
}
Essayez ceci et faites-moi savoir si cela fonctionne pour vous.
MODIFIER:
Je pense avoir enfin compris votre problème. Je peux vous donner une idée. Si vous ne souhaitez pas utiliser le menu de débordement et simplement afficher les éléments de menu comme indiqué dans la capture d'écran que vous avez publiée, vous pouvez créer une mise en page au-dessus de votre activité.
Vous pouvez prendre une disposition linéaire, donner un arrière-plan qui ressemble à la barre d'action et placer les icônes que vous souhaitez y placer, et leur donner des fonctionnalités avec onClickListener. J'espère que cela vous donnera une idée. De cette façon, vous pouvez créer votre propre menu personnalisé. Essayez la disposition ci-dessous et remplacez ic_launcher drawable par des icônes de menu. Ensuite, définissez simplement onClickListeners sur eux et exécutez les fonctions que vous souhaitez effectuer dans la méthode onClick.
<RelativeLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:background="#66000000" >
<ImageView
Android:id="@+id/xMenuBtn1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:background="@drawable/ic_launcher" />
<TextView
Android:id="@+id/xMenuTxt"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Chats"
Android:textSize="18sp"
Android:layout_toRightOf="@+id/xMenuBtn1"
Android:layout_centerVertical="true" />
<ImageView
Android:id="@+id/xMenuBtn2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_toLeftOf="@+id/xMenuBtn3"
Android:background="@drawable/ic_launcher" />
<ImageView
Android:id="@+id/xMenuBtn3"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentRight="true"
Android:background="@drawable/ic_launcher" />
</RelativeLayout>
Essayez dans votre activité surCreate ():
ActionBar bar = getSupportActionBar();
bar.setTitle(R.string.app_name);
et alors :
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
getSupportMenuInflater().inflate(R.menu.menu_activity, menu);
return super.onPrepareOptionsMenu(menu);
}