web-dev-qa-db-ja.com

androidポップアップメニューのテキストの色(AppCompat)

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>

間違いはどこですか?

25
<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。

22
Alfaplus

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>
42
Juan Labrador

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);

18
Junior Galdino

明らかに、独自の方法で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);
    }

それが役に立てば幸い。

2
Aritra Roy
//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>
1
Tousif Akram