wake-up-neo.net

Wie kann ich die Icon-Farbe von MenuItem einstellen?

Ich habe ein Menüelement definiert, das den ShareActionProvider und das weiße Symbol wie folgt enthält: 

<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"/>

Wenn ich die Anwendung starte, erhalte ich ein anderes schwarzes Freigabesymbol. Wie kann ich das Share-Symbol weiß einstellen? 

Hier ist das Ergebnis, das ich habe

 enter image description here

29
Dimitri

Dies ist eine Thematik. Abhängig von Ihrem aktuellen Design müssen Sie das richtige ActionBar-Overlay-Design festlegen. Der Aktionsanbieter liest einen Wert im Thema (der angibt, ob das Thema dunkel oder hell ist), um die Farbe des Symbols zu bestimmen.

Wenn Ihr Hauptthema hell und Ihre ActionBar dunkel ist, muss Ihre ActionBar/Symbolleiste das Thema ThemeOverlay.AppCompat.Dark.ActionBar verwenden.

37
BladeCoder

Das Symbol wird tatsächlich von der ShareActionProvider bereitgestellt und kann nicht afaik geändert werden. Sie können die Farbe jedoch anpassen, indem Sie in Ihrer styles.xml die Variable textColorPrimary einstellen:

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

Für alle benutzerdefinierten Symbole müssten Sie sie selbst einfärben, z.

@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;
}
59
tachyonflux

versuche dies :

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

Kurze und süße Antwort -> app: iconTint = "@ color/yourcolor

fügen Sie app:iconTint="@color/yourcolor" in Ihre MenuItem ein, um die Farbe des Symbols zu ändern.

<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"/>
11
Nikunj Paradva

kurze Antwort -> verwenden Sie app:iconTint="?android:textColorPrimary" Wenn die Farbe des Symbols weiß sein soll, schreiben Sie: Android:theme = "@style/ThemeOverlay.MaterialComponents.Dark.ActionBar" Wenn Sie schwarze Farbe wünschen, schreiben Sie: Android:theme="@style/ThemeOverlay.MaterialComponents.Light"

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

Dieses Verhalten wird erwartet, da ShareActionProvider ist 

verantwortlich für die Erstellung von Ansichten, die die gemeinsame Nutzung von Daten ermöglichen, und auch für Zeigt ein Untermenü mit Freigabeaktivitäten an, wenn der Hosting-Artikel platziert ist im Überlaufmenü.

gemäß der Dokumentation.

Dies bedeutet, dass Sie bei der Verwendung der Ansicht keine Kontrolle über die Anpassung der Ansicht haben. 

0
Robert Estivill