Cambiar el fondo popupMenu en Android

Traté de cambiar el fondo de popupmenu, pero mi implementación no funciona.

Este es mi código:

 @style/popupMenuStyle   @color/bgPopumMenu  

Aplicar en AndroidManifest.xml

  

los siguientes estilos funcionan perfectamente para mí.

  

aquí, el padre debe ser el padre de AppTheme

y en tu código utiliza estas líneas.

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

Espero que funcione.

Si bgPopumMenu es tu imagen, utiliza esto.

  

Debes aplicar tu estilo a tu AppTheme. Entonces prueba esto

   

Hice algunos cambios del código de @ Raju y los siguientes estilos me funcionaron,

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

y este es mi estilo,

   

LO RESOLVIÉ,

PopupMenu popup = new PopupMenu(context, view);

En el código anterior utilicé el contexto de tipo Activity no de tipo Context .

¡Enfriar!

que tal esto?

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

y escribir esto en el método 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; }}); } 

No puedes dar android:popupBackground como solo un color. Deberías usar o crear un drawable .

Puede usar este enlace http://jgilfelt.github.io/android-actionbarstylegenerator/ para generar el color deseado. Y drawable ese drawable .

Intenta definir android:actionBarWidgetTheme en tu tema:

     

Si bgPopumMenu es tu dibujable, utiliza esto

  @drawable/bgPopumMenu 

Simplemente póngalo directamente en su AppTheme como tal

  

Si está usando un tema personalizado:

  1. En Manifest: @style/MyMaterialTheme es mi tema personalizado:

       
  2. Use este código: R.style.popupMenuStyle para el menú emergente en la clase 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. este es el estilo personalizado del menú emergente para su propio fondo dibujable

  
  1. luego cambia en tu propio tema “popupMenuStyle”

       

Puede crear fácilmente un estilo para el menú emergente y aplicar ese estilo a un tema y puede asignar el tema a la Actividad / Actividad principal *** en el manifiesto de Android como este

  

Crea @ style / PopupMenu como este

  

Asigna el tema MyThemePopup a tu Activity / Parent Activity *** en AndroidManifest como

  

*** Cuando use el fragmento, aplique el tema para la actividad principal definida en AndroidManifest