Изменение фона popupMenu в 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">
Ответы
Ответ 1
следующие стили отлично работают для меня.
<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);
Надеюсь, он сработает.
Ответ 2
Если bgPopumMenu - это ваше изображение, используйте это.
<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>
Ответ 3
Я сделал некоторые изменения кода @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
что об этом:
@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;
}});
}
Ответ 5
Вы не можете дать android:popupBackground
только как цвет. Вы должны использовать или создать drawable
.
Вы можете использовать эту ссылку http://jgilfelt.github.io/android-actionbarstylegenerator/, чтобы создать желаемый цвет. И установите его на drawable
.
Ответ 6
Попробуйте определить 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>
Ответ 7
Если bgPopumMenu является вашим drawable, используйте этот
<item name="android:panelBackground">@drawable/bgPopumMenu</item>
Вы просто поместите это прямо в свой AppTheme так
<style name="AppTheme" parent="android:Theme.Holo.Light">
<item name="android:panelBackground">@drawable/bgPopumMenu</item>
</style>
Ответ 8
Если вы используете пользовательскую тему:
-
В манифесте: @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>
Ответ 9
Я РЕШИЛ его,
PopupMenu popup = new PopupMenu(context, view);
В приведенном выше коде я использовал контекст типа Activity
не типа Context
.
Холод!
Ответ 10
Вы можете легко создать стиль для всплывающего меню и применить этот стиль к теме, и вы можете назначить тему Activity/Parent Activity *** в манифесте андроида, подобном этому
<style name="MyThemePopup" parent="@style/AppTheme.NoActionBar">
<item name="android:popupMenuStyle">@style/PopupMenu</item>
</style>
Создать стиль @/PopupMenu, как этот
<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
<item name="android:popupBackground">#000000</item>
</style>
Назначьте тему MyThemePopup для Activity/Parent Activity *** в AndroidManifest как
<activity
android:name=".Activity"
android:label="@string/title_activity"
android:screenOrientation="portrait"
android:theme="@style/MyThemePopup"/>
*** Когда вы используете фрагмент, примените тему родительской активности, определенную в AndroidManifest