Ich möchte die Farbe einer Standard-Android-Schaltfläche leicht ändern, um sie besser an das Branding eines Kunden anzupassen.
Der beste Weg, dies bisher zu tun, besteht darin, das Button
Drawable in das Drawable zu ändern , das sich in befindet res/drawable/red_button.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/red_button_pressed" />
<item android:state_focused="true" android:drawable="@drawable/red_button_focus" />
<item android:drawable="@drawable/red_button_rest" />
</selector>
Dazu muss ich jedoch drei verschiedene Zeichen für jede Schaltfläche erstellen, die ich anpassen möchte (eine für die Schaltfläche in Ruhe, eine beim Fokussieren und eine beim Drücken). Das scheint komplizierter und nicht trocken zu sein, als ich brauche.
Alles, was ich wirklich tun möchte, ist eine Art Farbtransformation auf die Schaltfläche anzuwenden. Gibt es einen einfacheren Weg, um die Farbe einer Schaltfläche zu ändern als ich?
android
android-layout
emmby
quelle
quelle
Antworten:
Ich habe festgestellt, dass dies alles ziemlich einfach in einer Datei erledigt werden kann. Fügen Sie so etwas wie den folgenden Code in eine Datei mit dem Namen ein
custom_button.xml
und legen Sie ihnbackground="@drawable/custom_button"
in Ihrer Schaltflächenansicht fest:quelle
"Error: No resource found that matches the given name (at 'color' with value '@color/yellow1')"
Sind diese Verweise auf eingebaute Farben? Anscheinend brauche ich eine res / values / color.xml, damit das funktioniertIn Anlehnung an Tomasz 'Antwort können Sie den Farbton der gesamten Schaltfläche auch programmgesteuert im PorterDuff-Multiplikationsmodus einstellen. Dadurch wird die Tastenfarbe und nicht nur der Farbton geändert.
Wenn Sie mit einer grau schattierten Standardschaltfläche beginnen:
gibt Ihnen einen rot schattierten Knopf,
Sie erhalten eine grün schattierte Schaltfläche usw., wobei der erste Wert die Farbe im Hex-Format ist.
Es funktioniert, indem der aktuelle Farbwert der Schaltfläche mit Ihrem Farbwert multipliziert wird. Ich bin sicher, dass Sie mit diesen Modi noch viel mehr tun können.
quelle
import android.graphics.PorterDuff;
Mike, vielleicht interessieren dich Farbfilter.
Ein Beispiel:
Versuchen Sie dies, um die gewünschte Farbe zu erzielen.
quelle
Dies ist meine Lösung, die ab API 15 perfekt funktioniert . Diese Lösung behält alle Standard-Schaltflächenklick-Effekte wie Material bei
RippleEffect
. Ich habe es nicht auf niedrigeren APIs getestet, aber es sollte funktionieren.Alles was Sie tun müssen, ist:
1) Erstellen Sie einen Stil, der sich nur ändert
colorAccent
:2) Fügen Sie Ihrem
button
Widget diese beiden Zeilen hinzu :Beispiel-Button-Widget
quelle
colorAccent
mehr als nur den Hintergrund der Schaltfläche beeinflusst.Sie können nun auch AppCompat-v7 der Verwendung AppCompatButton mit dem
backgroundTint
Attribute:quelle
app:backgroundTint
stattandroid:backgroundTint
bei Verwendung von AppCompat sein.Ich mag den Farbfiltervorschlag in früheren Antworten von @conjugatedirection und @Tomasz; Ich stellte jedoch fest, dass der bisher bereitgestellte Code nicht so einfach anzuwenden war, wie ich erwartet hatte.
Zunächst wurde nicht erwähnt, wo der Farbfilter angewendet und gelöscht werden soll. Es ist möglich, dass es andere gute Orte gibt, um dies zu tun, aber mir fiel ein OnTouchListener ein .
Nach meiner Lektüre der ursprünglichen Frage wäre die ideale Lösung eine, die keine Bilder enthält. Die akzeptierte Antwort mit custom_button.xml von @emmby passt wahrscheinlich besser als Farbfilter, wenn dies Ihr Ziel ist. In meinem Fall beginne ich mit einem PNG-Bild eines UI-Designers, das zeigt, wie die Schaltfläche aussehen soll. Wenn ich den Hintergrund der Schaltfläche auf dieses Bild einstelle, geht das Standard-Feedback zur Hervorhebung vollständig verloren. Dieser Code ersetzt dieses Verhalten durch einen programmatischen Verdunkelungseffekt.
Ich habe dies als separate Klasse für die Anwendung auf mehrere Schaltflächen extrahiert - als anonyme innere Klasse angezeigt, um die Idee zu bekommen.
quelle
Wenn Sie Farbschaltflächen mit XML erstellen, können Sie den Code etwas übersichtlicher gestalten, indem Sie den fokussierten und gedrückten Status in einer separaten Datei angeben und wiederverwenden. Mein grüner Knopf sieht so aus:
quelle
Die kürzeste Lösung, die mit jeder Android-Version funktioniert:
Anmerkungen / Anforderungen :
app:
Namespace und nicht denandroid:
Namespace!Appcompat-Version> 24.2.0
Abhängigkeiten {compile 'com.android.support:appcompat-v7:25.3.1'}
Erklärung :
quelle
app:backgroundTint="@color/my_color"
nicht funktioniert.android:backgroundTint="@color/my_color"
hat aber perfekt funktioniert.Ich benutze diesen Ansatz
style.xml
Wie Sie oben sehen können, verwende ich einen benutzerdefinierten Stil für meine Schaltfläche. Die Tastenfarbe entspricht der Akzentfarbe. Ich finde dies ein viel besserer Ansatz als das Einstellen,
android:background
da ich den von Google bereitgestellten Welleneffekt nicht verliere.quelle
Es gibt jetzt einen viel einfacheren Weg: android-holo-colors.com
Damit können Sie die Farben aller Holo-Zeichen (Knöpfe, Spinner, ...) einfach ändern. Sie wählen die Farbe aus und laden dann eine Zip-Datei mit Zeichen für alle Auflösungen herunter.
quelle
Verwenden Sie es auf diese Weise:
quelle
In
<Button>
Gebrauchandroid:background="#33b5e5"
. oder besserandroid:background="@color/navig_button"
quelle
Die DroidUX- Komponentenbibliothek verfügt über ein
ColorButton
Widget, dessen Farbe sowohl über die XML-Definition als auch programmgesteuert zur Laufzeit leicht geändert werden kann, sodass Sie dem Benutzer sogar erlauben können, die Farbe / das Thema der Schaltfläche festzulegen, wenn Ihre App dies zulässt.quelle
Mit diesem Online-Tool können Sie auch Ihre Schaltfläche http://angrytools.com/android/button/ anpassen und
android:background="@drawable/custom_btn"
die angepasste Schaltfläche in Ihrem Layout definieren.quelle
Sie können das Thema Ihrer Schaltfläche darauf einstellen
quelle
Eine einfache Möglichkeit besteht darin, einfach eine benutzerdefinierte Button-Klasse zu definieren, die alle gewünschten Eigenschaften wie Radius, Verlauf, gepresste Farbe, normale Farbe usw. akzeptiert und diese dann einfach in Ihren XML-Layouts verwendet, anstatt den Hintergrund mithilfe von XML einzurichten. Ein Beispiel ist hier
Dies ist äußerst nützlich, wenn Sie viele Schaltflächen mit denselben Eigenschaften wie Radius, ausgewählte Farbe usw. haben. Sie können Ihre geerbte Schaltfläche anpassen, um diese zusätzlichen Eigenschaften zu verarbeiten.
Ergebnis (Es wurde kein Hintergrundwähler verwendet).
Normaler Knopf
Taste gedrückt
quelle
Die Art und Weise, wie ich eine andere gestaltete Schaltfläche mache, die recht gut funktioniert, besteht darin, das Schaltflächenobjekt zu unterordnen und einen Farbfilter anzuwenden. Dies behandelt auch aktivierte und deaktivierte Zustände, indem ein Alpha auf die Schaltfläche angewendet wird.
quelle
values \ styles.xml
dann:
quelle
Gemäß den Richtlinien für das Materialdesign müssen Sie den folgenden Stil verwenden
und fügen Sie im Layout diese Eigenschaft Ihrer Schaltfläche hinzu
quelle
Es ist einfach. Fügen Sie diese Abhängigkeit in Ihr Projekt ein und erstellen Sie eine Schaltfläche mit 1. Beliebiger Form 2. Beliebiger Farbe 3. Beliebiger Rand 4. Mit Materialeffekten
https://github.com/manojbhadane/QButton
quelle