Kann man die drawableLinks in einem Android-Button einfärben? Ich habe ein schwarzes Zeichen, das ich weiß färben möchte. Ich weiß, wie ich dies mit einer Bildansicht erreichen kann (Bild links), aber ich möchte dies mit der Standard-Android-Schaltfläche tun.
Mein Quellcode:
<Button Android:layout_height="wrap_content"
Android:layout_width="0dp"
Android:layout_weight="1"
Android:text="@string/drawer_quizzes"
Android:backgroundTint="@color/md_light_green_500"
Android:stateListAnimator="@null"
Android:textColor="#fff"
Android:textSize="12dp"
Android:fontFamily="sans-serif"
Android:drawableLeft="@drawable/ic_action_landscape"
Android:gravity="left|center_vertical"
Android:drawablePadding="8dp"
/>
Gibt es eine Möglichkeit, den Knopf zu färben? Oder gibt es eine benutzerdefinierte Ansichtsmethode, um diesen Effekt zu erzielen?
Mit dieser Methode können Sie die Zeichenfläche auf einer Schaltfläche färben:
Schritt 1: Erstellen Sie eine gezeichnete Ressourcendatei mit Bitmap als übergeordnetes Element (siehe unten), und nennen Sie sie itas ic_action_landscape.xml
unter dem zu zeichnenden Ordner
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:src="@Android:drawable/ic_btn_speak_now"
Android:tint="@color/white" />
Schritt 2: Erstellen Sie Ihr Button-Steuerelement in Ihrem Layout wie folgt
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:backgroundTint="@color/md_light_green_500"
Android:drawableLeft="@drawable/ic_action_landscape"
Android:drawablePadding="8dp"
Android:fontFamily="sans-serif"
Android:gravity="left|center_vertical"
Android:stateListAnimator="@null"
Android:text="@string/drawer_quizzes"
Android:textColor="#fff"
Android:textSize="12dp" />
Die Schaltfläche erhält das Zeichen von ic_action_landscape.xml
aus dem Zeichenordner anstelle von @Android: Zeichen- oder Zeichen-Png (s).
Methode 2:
Schritt 1:
Sie können das Symbol sogar als Aktionsleisten- und Registersymbole mit Vordergrund als Bild Hinzufügen, das von einem benutzerdefinierten Speicherort oder einer Clipart importiert werden kann
Schritt 2:
Wählen Sie Benutzerdefiniert aus
Schritt 3:
.__ Wählen Sie dann die Farbe in der Vordergrundfarbenauswahl als #FFFFFF .
Beenden Sie schließlich den Assistenten, um das Bild hinzuzufügen, und fügen Sie dann das Zeichenobjekt als Bild hinzu.
Wie von @Boris vorgeschlagen, können Sie die Support-Bibliothek verwenden.
Ich habe den AppCompatButton um einige Draft Code erweitert. Das TintAppCompatButton sollte das Standardverhalten haben, aberTintAppCompatButtonCustom wurde erstellt, um benutzerdefinierte Farbgebung zu demonstrieren.
Ich werde sehen, ob ich eine PR erhöhen kann, um dies in die offizielle Support-Bibliothek aufzunehmen.
Der Code von Interesse ist:
private void init() {
PorterDuff.Mode tintMode = PorterDuff.Mode.SRC_IN;
Drawable[] ds = getCompoundDrawables();
tint(ds[LEFT], Color.RED, tintMode);
tint(ds[TOP], Color.YELLOW, tintMode);
tint(ds[RIGHT], Color.GREEN, tintMode);
tint(ds[BOTTOM], Color.BLUE, tintMode);
}
private void tint(Drawable d, int color, PorterDuff.Mode tintMode) {
TintInfo ti = new TintInfo();
ti.mTintMode = tintMode;
ti.mTintList = ColorStateList.valueOf(color);
ti.mHasTintList = true;
ti.mHasTintMode = true;
TintManager.tintDrawable(d, ti, new int[]{0});
}
Ich weiß, dass es bereits viele Antworten gibt, aber keine davon hat mich glücklich gemacht, da ich keine unterschiedlichen Drawables für verschiedene Elementstile haben wollte.
Meine Lösung bestand also darin, den Farbfilter im Konstruktor so einzustellen:
int textColor = getTextColors().getColorForState(EMPTY_STATE_SET, Color.WHITE);
Drawable[] drawables = getCompoundDrawablesRelative();
for (Drawable drawable : drawables) {
if(drawable != null) {
drawable.setColorFilter(textColor, PorterDuff.Mode.SRC_ATOP);
}
}
Ich habe Textfarbe verwendet, weil dies das war, was ich brauche, aber es kann durch ein benutzerdefiniertes Attribut ersetzt werden, um dynamischer zu sein.
Sie können Android:drawableTint="@color/yourColor"
in> 23 Android-Version verwenden.
Genau das konnte ich auch mit einem MaterialButton (aus der Material Support Library, die die meisten Leute wahrscheinlich schon benutzen) erreichen. MaterialButton hat ein Attribut mit dem Namen icon, das links/zentriert/rechts platziert werden kann (Standardeinstellung links). Es hat auch ein Attribut namens iconTint, das das Symbol färbt.
Gradle:
implementation "com.google.Android.material:material:1.1.0-alpha09"
Aussicht:
<com.google.Android.material.button.MaterialButton
Android:layout_width="0dp"
Android:layout_weight="1"
Android:text="@string/drawer_quizzes"
Android:backgroundTint="@color/md_light_green_500"
Android:stateListAnimator="@null"
Android:textColor="#fff"
Android:textSize="12dp"
Android:fontFamily="sans-serif"
app:icon="@drawable/ic_action_landscape"
app:iconTint="@color/white"
Android:gravity="left|center_vertical"
Android:drawablePadding="8dp"
/>
Ich bin zwar spät dran, aber wenn Sie C # verwenden, können Sie es so machen:
Color iconColor = Color.Orange; // TODO: Get from settings
Mode mode = Mode.SrcAtop;
Drawable drawable = ResourcesCompat.GetDrawable(Resources, Resource.Drawable.ic_action_arrest, null);
drawable.SetColorFilter(iconColor, mode);
Sie benötigen auch:
using Android.Graphics;
using static Android.Graphics.PorterDuff;
using Android.Graphics.Drawables;
Hoffe das hilft. Es ist der einfachste Weg, den ich gefunden habe . Beachten Sie auch, dass Sie JEDER Stelle in Ihrer App, dass Sie dieses Symbol verwenden, diese Farbe hat.