Quelle est la façon (s'il y a un moyen) de personnaliser le menu (celui déclenché par le bouton de menu du téléphone). Je suis particulièrement intéressé par deux choses:
Pas avec le cadre de menu intégré.
Vous êtes invitée à intercepter le bouton Menu (via onKeyDown()
ou quelque chose) et rendu ce que vous voulez, mais gardez à l'esprit que les utilisateurs s'attendront à ce que cela ressemble au reste des menus sur leur appareil.
J'ai créé ma propre classe de menus. Ce n'est peut-être pas exactement ce que vous voulez, mais j'espère que vous commencez à démarrer. Voici l'article que j'ai publié et un lien téléchargeable vers le code source.
http://www.codeproject.com/kb/andrroid/androidmenusmyway.aspx
Vous pouvez également simplement implémenter la méthode "OncreateOptionsMenu", qui est généralement utilisée pour afficher le menu standard et afficher ce que vous voulez dans ce cas.
Dans mon jeu, je l'ai mis en place pour afficher une boîte de dialogue "pause de jeu" lorsque vous appuyez sur la touche MENU ...
Utilisez des styles. Cela fonctionne pour moi sur Android 5.0
<style name="AppTheme" parent="Android:Theme.Material.Light">
<item name="Android:colorPrimary">@color/primary</item>
<item name="Android:actionOverflowMenuStyle">@style/PopupMenu.MyStyle</item>
</style>
<style name="PopupMenu.MyStyle" parent="Android:Widget.PopupMenu">
<item name="Android:popupBackground">@drawable/actionbar_item_background</item>
</style>
... alors le sélecteur digue est un sélecteur régulier
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@color/primary"/>
<item Android:drawable="@color/highlighted" Android:state_pressed="true"/>
</selector>
couleur du menu de fond dans style.xml dans votre thème
<item name="Android:panelFullBackground">@Android:color/darker_gray</item>
Cette réponse fonctionne mais s'est écrasée pour moi lors de l'utilisation d'ActionbarcherLock. Voici une solution de contournement hacky pour rendre ce travail néanmoins.
// Black Vodoo! Do not try this at home.
final LayoutInflater li = getLayoutInflater();
final Class<LayoutInflater> clazz = LayoutInflater.class;
try {
final Field fieldSet = clazz.getDeclaredField("mFactorySet");
fieldSet.setAccessible(true);
fieldSet.setBoolean(li, false);
li.setFactory(new Factory() {
@Override
public View onCreateView(final String name,
final Context context, final AttributeSet attrs) {
if (name.equalsIgnoreCase("com.Android.internal.view.menu.IconMenuItemView")) {
try {
final LayoutInflater f = getLayoutInflater();
final View view = f.createView(name, null, attrs);
new Handler().post(new Runnable() {
@Override
public void run() {
// Set the text color
((TextView) view).setTextColor(Color.WHITE);
}
});
return view;
} catch (final Exception e) {
}
}
return null;
}
});
} catch (final Exception e) {
e.printStackTrace();
}