È possibile, ovviamente, personalizzare il PopupMenu nel proprio modo. È abbastanza semplice. Ma prima devi occuparti di una cosa molto importante.
Il PopupMenu si crea in questo modo,
PopupMenu popupMenu = new PopupMenu(context, anchorView);
Ora il "contesto" qui gioca un ruolo molto importante nella styling. Lo stile del PopupMenu dipende dallo stile del contesto che si passa. Quindi stai molto attento in questo. Ho perso quasi mezz'ora a capirlo.
Se si è in un frammento basta passare "getActivity()" e il gioco è fatto.
Styling degli elementi PopUpMenu
Basta ignorare i seguenti articoli nel tuo stile,
<item name="textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
<item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
<item name="textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
<item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
e personalizzare l'aspetto del testo che si desidera,
<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small">
<item name="android:textColor">@color/text_hint_color</item>
</style>
<style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large">
<item name="android:textColor">@color/text_hint_color</item>
</style>
Se si desidera per cambiare lo sfondo del PopupMenu, fai questo
<item name="popupMenuStyle">@style/myPopupMenuStyle</item>
<item name="android:popupMenuStyle">@style/myPopupMenuStyle</item>
avanzata Styling
Le voci PopUpMenu non supportano che mostra le icone di default. Ma mostrare le icone può farlo sembrare molto meglio. Consiglio di provarlo.
Per attuare questo basta mettere il seguente codice nella vostra attività e vi sono buone per andare,
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try {
Method m = menu.getClass().getDeclaredMethod(
"setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (NoSuchMethodException e) {
Log.e("tag", "onMenuOpened", e);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
return super.onMenuOpened(featureId, menu);
}
Speranza che aiuta.
Definire gli stili in AppTheme, invece di AppBaseTheme. AppBaseTheme ha le proprie implementazioni per i livelli API 11 e 14 per impostazione predefinita, che ha ridefinito i tuoi stili. – Ganster41
possibile duplicato di [Come personalizzare PopupMenu?] (Http://stackoverflow.com/questions/12636101/how-to-style-popupmenu) –
@ArtjomB. Alcuni si sovrappongono ma non un duplicato perché questa domanda riguarda specificamente i popup di AppCompat. –