studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android menuitem

android - programacion - ¿Cómo configurar el color del icono de MenuItem?



manual de programacion android pdf (7)

Respuesta corta y dulce -> aplicación: iconTint = "@ color / yourcolor

agregue la app:iconTint="@color/yourcolor" en su elemento de MenuItem para cambiar el color del icono.

<item android:icon="@drawable/ic_share_white_24dp" android:id="@+id/action_share" android:title="@string/action_share" android:orderInCategory="200" app:iconTint="@color/yourcolor" app:showAsAction="ifRoom" app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>

Definí un elemento del menú que tiene ShareActionProvider y comparto un icono blanco como:

<item android:icon="@drawable/ic_share_white_24dp" android:id="@+id/action_share" android:title="@string/action_share" android:orderInCategory="200" app:showAsAction="ifRoom" app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>

Pero cuando ejecuto la aplicación, aparece un icono de compartir negro diferente. ¿Cómo configurar el icono de compartir para que sea blanco?

Aquí está el resultado que tengo


El icono lo proporciona el ShareActionProvider y usted no puede cambiarlo. Sin embargo, puede personalizar el color configurando textColorPrimary en su styles.xml:

<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:theme="@style/MyActionBarTheme" app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

<style name="MyActionBarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:textColorPrimary">#fa0</item> </style>

Para cualquier ícono personalizado, tendría que colorearlos usted mismo, es decir.

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); for(int i = 0; i < menu.size(); i++){ Drawable drawable = menu.getItem(i).getIcon(); if(drawable != null) { drawable.mutate(); drawable.setColorFilter(getResources().getColor(R.color.textColorPrimary), PorterDuff.Mode.SRC_ATOP); } } return true; }


Este es un tema temático. Dependiendo de su tema actual, debe configurar el tema de superposición de ActionBar correcto. El proveedor de acciones lee un valor en el tema (que indica si el tema es oscuro o claro) para determinar el color del icono.

Si su tema principal es claro y su barra de acción está oscura, su barra de herramientas / barra de herramientas debe usar el tema ThemeOverlay.AppCompat.Dark.ActionBar .


Se espera este comportamiento, ya que ShareActionProvider es

responsable de crear vistas que permitan compartir datos y también mostrar un submenú con actividades compartidas si el elemento de alojamiento se coloca en el menú de desbordamiento.

Según la documentación.

Esto significa que no tiene control sobre la personalización de la vista cuando la usa.



prueba esto :

public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.MENU, menu); // change color for icon 0 Drawable yourdrawable = menu.getItem(0).getIcon(); // change 0 with 1,2 ... yourdrawable.mutate(); yourdrawable.setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_IN); return true; }


@Override public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) { menuInflater.inflate(R.menu.menu_confirm, menu); MenuItem action_done = menu.findItem(R.id.action_done); action_done.setIcon(R.drawable.ic_filter); Utils.menuIconColor(action_done, Color.WHITE); super.onCreateOptionsMenu(menu, menuInflater); } public static void menuIconColor(MenuItem menuItem, int color) { Drawable drawable = menuItem.getIcon(); if (drawable != null) { drawable.mutate(); drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); } }