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?
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.
Utilicé esta biblioteca para lograr este menú:
Eche un vistazo a mi repositorio de Github: https://github.com/lalongooo/permutas-sep/blob/master/app/src/main/java/com/permutassep/ui/ActivityMain.java#L171
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);
}
}