Popuoメニューのテキストの色を変更する必要がありますが、これを行う方法が見つかりません。popmenuの背景は変更できますが、テキストは変更できません。style.xmlを次のように編集します。
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<!-- API 14 theme customizations can go here. -->
<item name="popupMenuStyle">@style/MyPopupMenu</item>
<item name="Android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
<item name="Android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
</style>
<style name="MyPopupMenu" parent="@style/Widget.AppCompat.PopupMenu">
<item name="Android:popupBackground">#0F213F</item>
</style>
<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Base.Widget.PopupMenu.Small">
<item name="Android:textColor">#ffffff</item>
</style>
<style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Base.Widget.PopupMenu.Large">
<item name="Android:textColor">#ffffff</item>
</style>
間違いはどこですか?
<item name="textAppearanceLargePopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large</item>
<item name="textAppearanceSmallPopupMenu">@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small</item>
TextAppearance.AppCompat.Base.Widget.PopupMenuを使用していると思います。ここにエラーがあります。現在のスタイルに応答しない別の親を使用しています。
以下を使用する必要があります。
TextAppearance.AppCompat.Light.Widget.PopupMenu。
Styles.xmlで
<style name="itemTextStyle.AppTheme" parent="@Android:style/TextAppearance.Widget.IconMenu.Item">
<item name="Android:textColor">@drawable/color_item_popup</item>
<item name="Android:textSize">@dimen/text_content</item>
</style>
appThemeに追加します
<item name="Android:itemTextAppearance">@style/itemTextStyle.AppTheme</item>
color_item_popup.xml
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true" Android:color="@color/primary_text"/>
<item Android:state_focused="true" Android:color="@color/primary_text"/>
<item Android:color="@color/secondary_text"/>
</selector>
Styles.xmlで:
_<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu.Overflow">
<item name="Android:popupBackground">@color/white</item>
</style>
_
Javaの場合:
Context wrapper = new ContextThemeWrapper(getContext(), R.style.PopupMenu); final PopupMenu popupMenu = new PopupMenu(wrapper, view);
明らかに、独自の方法でPopupMenuをカスタマイズできます。とても簡単です。ただし、最初に1つの非常に重要なことに注意する必要があります。
PopupMenuは次のように作成されます。
PopupMenu popupMenu = new PopupMenu(context, anchorView);
現在、ここでの「コンテキスト」はスタイリングにおいて非常に重要な役割を果たしています。 PopupMenuのスタイルは、渡すコンテキストのスタイルに依存します。そのため、これには非常に注意してください。これを理解するのに30分近く無駄にした。
フラグメントにいる場合は、「getActivity()」を渡すだけで完了です。
PopupMenuアイテムのスタイル設定
スタイル内の次の項目をオーバーライドするだけで、
<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>
そして、必要に応じてテキストの外観をカスタマイズし、
<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>
PopupMenuの背景を変更する場合は、これを行います
<item name="popupMenuStyle">@style/myPopupMenuStyle</item>
<item name="Android:popupMenuStyle">@style/myPopupMenuStyle</item>
高度なスタイル設定
PopupMenuアイテムは、デフォルトでアイコンの表示をサポートしていません。しかし、アイコンを表示すると、見栄えがずっと良くなります。試してみることをお勧めします。
これを実装するには、アクティビティに次のコードを追加するだけでよいのです。
@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);
}
それが役に立てば幸い。
//In Main Style
<item name="popupMenuStyle">@style/popupMenuStyle</item>
<item name="Android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
<item name="Android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
//In Define part
<style name="popupMenuStyle" parent="Widget.AppCompat.PopupMenu">
<item name="Android:popupBackground">@drawable/popup_bg</item>
<item name="Android:textColor">#ffffff</item>
</style>
<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Widget.PopupMenu.Small">
<item name="Android:textColor">#ffffff</item>
</style>
<style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Widget.PopupMenu.Large">
<item name="Android:textColor">#ffffff</item>
</style>
//you may use this background
//popup_bg.xml
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<gradient
Android:angle="135"
Android:centerColor="#c8232323"
Android:endColor="#c80d0d0d"
Android:startColor="#c8434242"
Android:type="linear" />
</shape>