ポップアップメニューの背景を変更しようとしましたが、実装が機能しません。
これは私のコードです:
<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">
次のスタイルは私にとって完璧に機能します。
<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);
私はそれがうまくいくことを願っています。
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>
@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>
カスタムテーマを使用している場合:
マニフェスト:@style/MyMaterialTheme
は私のカスタマイズされたテーマです:
<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:theme="@style/MyMaterialTheme">
このコードを使用してください: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);
<style name="popupMenuStyle" parent="@Android:style/Widget.PopupMenu">
<item name="Android:popupBackground">@drawable/dropdown_bg</item>
</style>
次に、独自のテーマ「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>
私はそれを解決しました、
PopupMenu popup = new PopupMenu(context, view);
上記のコードでは、Activity
タイプではなくタイプContext
のコンテキストを使用しました。
チル!
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>
Android:popupBackground
を単なる色として与えることはできません。 drawable
を使用または作成する必要があります。
このリンクを使用して http://jgilfelt.github.io/Android-actionbarstylegenerator/ 目的の色を生成できます。そして、それをそのdrawable
に設定します。
テーマで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>
ポップアップメニューのスタイルを簡単に作成し、そのスタイルをテーマに適用できます。また、このように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で定義されている親アクティビティのテーマを適用してください
これはどうですか :
_@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;
}});
}
_
以下の行をStyle.xmlとその動作に追加するだけです:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- To change action bar menuItem BG -->
<item name="Android:itemBackground">@color/white</item>
</style>