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