android - programacion - Cambiar el estilo del menú emergente-no funciona
manual de android en pdf (3)
También probé la solución mencionada anteriormente, por mi popupmenu color no se cambia, así que terminé haciendo lo siguiente:
- Creado un drawable personalizado con el color requerido de la siguiente manera:
popup_color_drawable
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <color android:color="@color/colorPrimary"/> </item> <item> <color android:color="#655611"/> </item> </selector>
Se agregó state_pressed para obtener el efecto de selección
2. En mi código de styles.xml agregado siguiente
<style name="MyPopupMenu" parent="Widget.AppCompat.PopupMenu"> <item name="android:itemBackground">@drawable/popup_color_drawable</item> </style>
Estoy utilizando Theme.AppCompat.Light.DarkActionBar
como mi tema base para la aplicación.
- Entonces en mi actividad
public void showpopup(View view){ Context wrapper = new ContextThemeWrapper(this, R.style.MyPopupMenu); PopupMenu popup = new PopupMenu(wrapper, view); popup.inflate(R.menu.popup_menu); popup.show(); }
A continuación está el resultado que obtengo
Espera que esto te ayude.
PD. Estoy recibiendo un problema de formato de código con stackoverflow, así que necesito usar blockquote sobre el formateador de código.
Estoy intentando aplicar estilo al menú emergente de Android. El menú se muestra al hacer clic en el botón. En mi ejemplo, quiero establecer el fondo del menú negro.
Entonces, mi diseño de menú:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:title="Item 1"
android:id="@+id/menu1">
</item>
<item
android:title="Item 2"
android:id="@+id/menu2">
</item>
</menu>
A continuación, mi diseño de actividad:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.michal.popupmenu.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:onClick="btnClick"
android:nestedScrollingEnabled="true"/>
</RelativeLayout>
Código para mostrar el menú en el botón clic:
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void btnClick(View view)
{
showMenu(view);
}
public void showMenu(View v)
{
PopupMenu popup = new PopupMenu(this, v);
popup.inflate(R.menu.popup_menu);
popup.show();
}
}
Los estilos xmle se generaron automáticamente. Solo agregué el estilo del menú para establecer el fondo del menú negro, aquí está:
<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu">
<item name="android:popupBackground">@android:color/black</item>
</style>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="popupMenuStyle">@style/PopupMenu</item>
</style>
Pero aún el fondo del menú es blanco y debe ser negro. Alguna idea de lo que está mal?
[editar] De acuerdo a los comentarios, código actualizado:
<resources>
<style name="PopupMenu" parent="@style/Widget.AppCompat.Light.PopupMenu">
<item name="android:popupBackground">#FF4081</item>
</style>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
Actividad principal:
public void showMenu(View v)
{
Context wrapper = new ContextThemeWrapper(getApplicationContext(), R.style.PopupMenu);
PopupMenu popup = new PopupMenu(wrapper, v);
// This activity implements OnMenuItemClickListener
//popup.setOnMenuItemClickListener((PopupMenu.OnMenuItemClickListener) this);
popup.inflate(R.menu.popup_menu);
popup.show();
}
El resultado no es lo que espero
El fondo del menú sigue siendo negro, no es un color que quiero configurar.
deberías probar esto:
public void showMenu(View v)
{
Context wrapper = new ContextThemeWrapper(getContext(), R.style.PopupMenu);
PopupMenu popup = new PopupMenu(wrapper, v);
popup.inflate(R.menu.popup_menu);
popup.show();
}
En la pregunta original, todo lo que necesita hacer es cambiar:
<item name="android:popupBackground">#FF4081</item>
a:
<item name="android:itemBackground">@android:color/white</item>