studio - programacion android pdf 2018




¿Cómo configurar el color del icono de MenuItem? (5)

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;
}

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.



@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);
    }
}






menuitem