web-dev-qa-db-ja.com

Androidの背景popupMenuを変更します

ポップアップメニューの背景を変更しようとしましたが、実装が機能しません。

これは私のコードです:

<style name="MyHoloLight" parent="Android:Theme.Holo.Light">
    <item name="Android:popupMenuStyle">@style/popupMenuStyle</item>
</style>
<style name="popupMenuStyle" parent="@Android:style/Widget.PopupMenu">
    <item name="Android:popupBackground">@color/bgPopumMenu</item>
</style>

AndroidManifest.xmlで適用する

<application
        Android:hardwareAccelerated="true"
        Android:label="@string/app_name"
        Android:icon="@drawable/ic_launcher"
        Android:theme="@style/MyHoloLight">
11
user1854307

次のスタイルは私にとって完璧に機能します。

<style name="popupMenuStyle" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="Android:textColor">@color/color_white</item>
    <item name="Android:itemBackground">@color/color_red</item>
</style>

ここでは、親はAppTheme親である必要があります

コードでこれらの行を使用します。

Context wrapper = new ContextThemeWrapper(context, R.style.popupMenuStyle);
PopupMenu popup = new PopupMenu(wrapper, v);

私はそれがうまくいくことを願っています。

31
Raju

bgPopumMenが画像の場合は、これを使用します。

<style name="popupMenuStyle" parent="@Android:style/Widget.PopupMenu">
<item name="Android:popupBackground">@drawable/bgPopumMenu</item>
</style>

AppThemeにスタイルを適用する必要があります。だからこれを試してみてください。

<style name="AppTheme" parent="Android:Theme.Holo.Light">
<item name="Android:popupMenuStyle">@style/popupMenuStyle</item>
</style>
<style name="popupMenuStyle" parent="@Android:style/Widget.PopupMenu">
<item name="Android:popupBackground">@color/bgPopumMenu</item>
</style>
5
Piyush

@Rajuのコードと次のスタイルにいくつか変更を加えました。

Context wrapper = new ContextThemeWrapper(context,R.style.popupMenuStyle);
PopupMenu popup = new PopupMenu(wrapper, YourView);

これが私のスタイルです、

<style name="popupMenuStyle" parent="Android:Theme.Holo.Light.DarkActionBar">
    <item name="Android:popupMenuStyle">@style/MyApp.PopupMenu</item>
    <item name="Android:textColor">@color/White</item>
</style>

<style name="MyApp.PopupMenu" parent="Android:Widget.Holo.Light.ListPopupWindow">
<item name="Android:popupBackground">@color/color_semi_transparent</item>       
</style>
4

カスタムテーマを使用している場合:

  1. マニフェスト:@style/MyMaterialThemeは私のカスタマイズされたテーマです:

      <application
            Android:allowBackup="true"
            Android:icon="@mipmap/ic_launcher"
            Android:label="@string/app_name"
            Android:supportsRtl="true"
            Android:theme="@style/MyMaterialTheme">
    
  2. このコードを使用してください:R.style.popupMenuStyle Javaクラスのポップアップメニュー:

Context wrapper = new ContextThemeWrapper(getContext(), R.style.popupMenuStyle);
PopupMenu popup = new PopupMenu(wrapper, v);

//Inflating the Popup using xml file
popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());

MenuPopupHelper menuHelper = new MenuPopupHelper(wrapper, (MenuBuilder) popup.getMenu(), v);
menuHelper.setForceShowIcon(true);
menuHelper.setGravity(Gravity.RIGHT);
  1. これは、独自の背景ドローアブル用のカスタムスタイルのポップアップメニューです。
<style name="popupMenuStyle" parent="@Android:style/Widget.PopupMenu">
    <item name="Android:popupBackground">@drawable/dropdown_bg</item>
</style>
  1. 次に、独自のテーマ「popupMenuStyle」に変更します

    <style name="MyMaterialTheme" parent="MyMaterialTheme.Base">
    
        </style>
    
        <style name="MyMaterialTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
            <item name="windowNoTitle">true</item>
            <item name="windowActionBar">false</item>
            <item name="colorPrimary">@color/colorPrimary</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorPrimary</item>
    
            <item name="popupMenuStyle">@style/popupMenuStyle</item>
            <item name="Android:popupMenuStyle">@style/popupMenuStyle</item>
        </style>
    
1
Heena Arora

私はそれを解決しました、

PopupMenu popup = new PopupMenu(context, view);

上記のコードでは、ActivityタイプではなくタイプContextのコンテキストを使用しました。

チル!

1
Ali Akram

BgPopumMenuがドローアブルである場合は、これを使用してください

    <item name="Android:panelBackground">@drawable/bgPopumMenu</item>

あなたはそれをあなたのAppThemeに直接入れるだけです

<style name="AppTheme" parent="Android:Theme.Holo.Light">
    <item name="Android:panelBackground">@drawable/bgPopumMenu</item>
</style>
0
Murphybro2

Android:popupBackgroundを単なる色として与えることはできません。 drawableを使用または作成する必要があります。

このリンクを使用して http://jgilfelt.github.io/Android-actionbarstylegenerator/ 目的の色を生成できます。そして、それをそのdrawableに設定します。

0
tasomaniac

テーマでAndroid:actionBarWidgetThemeを定義してみてください。

<style name="MyHoloLight" parent="Android:Theme.Holo.Light">
    <item name="Android:popupMenuStyle">@style/popupMenuStyle</item>
    <item name="Android:actionBarWidgetTheme">@style/Theme.Example.Widget</item>
</style>
<style name="popupMenuStyle" parent="@Android:style/Widget.PopupMenu">
    <item name="Android:popupBackground">@color/bgPopumMenu</item>
</style>
<style name="Theme.Example.Widget" parent="@style/Theme.AppCompat">
    <item name="popupMenuStyle">@style/popupMenuStyle</item>
    <item name="dropDownListViewStyle">@style/DropDownListView.Example</item>
</style>
<style name="DropDownListView.Example" parent="@style/Widget.AppCompat.ListView.DropDown">
    <item name="Android:listSelector">@color/bgPopumMenu_whenSelected</item>
</style>
0
paaacman

ポップアップメニューのスタイルを簡単に作成し、そのスタイルをテーマに適用できます。また、このようにAndroidマニフェストで、テーマをアクティビティ/親アクティビティ***に割り当てることができます。

<style name="MyThemePopup" parent="@style/AppTheme.NoActionBar">
    <item name="Android:popupMenuStyle">@style/PopupMenu</item>
</style>

このように@style/PopupMenuを作成します

<style name="PopupMenu" parent="@Android:style/Widget.PopupMenu">
    <item name="Android:popupBackground">#000000</item>
</style>

MyThemePopupテーマをAndroidManifestのアクティビティ/親アクティビティ***に次のように割り当てます

<activity
            Android:name=".Activity"
            Android:label="@string/title_activity"
            Android:screenOrientation="portrait"
            Android:theme="@style/MyThemePopup"/>

***フラグメントを使用する場合は、AndroidManifestで定義されている親アクティビティのテーマを適用してください

0
Manoranjan

これはどうですか :

_@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    MenuInflater inflater=getMenuInflater();
    inflater.inflate(R.menu.menu,menu);
    setMenuBackground(); 
    return true;    
}
_

これをsetMenuBackground()メソッドに記述します

_protected void setMenuBackground(){                              
        getLayoutInflater().setFactory( new Factory() {  
            public View onCreateView(String name, Context context, AttributeSet attrs) {
                if ( name.equalsIgnoreCase( "com.Android.internal.view.menu.IconMenuItemView" ) ) {
                    try { // Ask our inflater to create the view  
                        LayoutInflater f = getLayoutInflater();  
                        final View view = f.createView( name, null, attrs );  
                        /* The background gets refreshed each time a new item is added the options menu.  
                        * So each time Android applies the default background we need to set our own  
                        * background. This is done using a thread giving the background change as runnable 
                        * object */
                        new Handler().post( new Runnable() {  
                            public void run () {  
                                // sets the background here
                                view.setBackgroundResource( R.drawable.bgPopumMenu);
                                // sets the text color              
                                ((TextView) view).setTextColor(Color.BLACK);
                                // sets the text size              
                                ((TextView) view).setTextSize(18);
                }
                        } );  
                    return view;
                }
            catch ( InflateException e ) {}
            catch ( ClassNotFoundException e ) {}  
        } 
        return null;
    }}); 
}
_
0
Lucian Novac

以下の行をStyle.xmlとその動作に追加するだけです:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- To change action bar menuItem BG -->
            <item name="Android:itemBackground">@color/white</item>
 </style>
0
axita.savani