Ich verwende ein Standard-Switch-Steuerelement mit dem Thema holo.light in einer ICS-App.
Ich möchte die hervorgehobene oder eingeschaltete Statusfarbe der Umschalttaste von hellblau auf grün ändern.
Das sollte einfach sein, aber ich kann anscheinend nicht herausfinden, wie es geht.
android
togglebutton
JamesSugrue
quelle
quelle
Switch
auf diesen benutzerdefinierten Selektor zu verweisen .Antworten:
Ab sofort ist es besser, SwitchCompat aus der AppCompat.v7-Bibliothek zu verwenden. Sie können dann ein einfaches Styling verwenden, um die Farbe Ihrer Komponenten zu ändern.
Ref: Android-Entwickler-Blog
EDIT :
Die Art und Weise, wie es korrekt angewendet werden sollte, ist durch
android:theme="@style/Theme.MyTheme"
und dies kann auch auf übergeordnete Stile wie EditTexts, RadioButtons, Switches, CheckBoxes und ProgressBars angewendet werden:quelle
colorAccent
, "Aus" istcolorSwitchThumbNormal
. Wenn Sie dasAppCompat
Thema verwenden, müssen Sie esSwitchCompat
eher als verwendenSwitch
. Wenn Sie SDK 23+ verwenden, können Sieandroid:thumbTint
undandroid:thumbTintMode
mit a verwendenColorStateList
.Spät zum Feiern, aber so habe ich es gemacht
Stil
Farben
Layout
Ergebnis
Siehe Farbänderung für aktivierte und deaktivierte Schalter
quelle
SwitchCompat
;)Dies funktioniert für mich (erfordert Android 4.1):
Beachten Sie, dass der Status "Standard" zuletzt hinzugefügt werden muss, wie hier gezeigt.
Das einzige Problem, das ich sehe, ist, dass der "Daumen" des Schalters jetzt größer erscheint als der Hintergrund oder die "Spur" des Schalters. Ich denke, das liegt daran, dass ich immer noch das Standard-Track-Image verwende, um das herum etwas Leerraum ist. Als ich jedoch versuchte, das Titelbild mit dieser Technik anzupassen, schien mein Schalter eine Höhe von 1 Pixel zu haben, wobei nur ein Streifen des Ein / Aus-Textes angezeigt wurde. Es muss eine Lösung dafür geben, aber ich habe sie noch nicht gefunden ...
Update für Android 5
In Android 5 lässt der obige Code den Schalter vollständig verschwinden. Wir sollten in der Lage sein, die neue setButtonTintList- Methode zu verwenden, aber dies scheint für Schalter ignoriert zu werden. Aber das funktioniert:
Update für Android 6-7
Wie Cheruby in den Kommentaren feststellte, können wir das Neue verwenden
setThumbTintList
und das hat wie erwartet für mich funktioniert. Wir können auch verwendensetTrackTintList
, aber das wendet die Farbe als Mischung an, mit einem Ergebnis, das bei dunklen Farbthemen dunkler als erwartet und bei hellen Farbthemen heller als erwartet ist, manchmal bis zur Unsichtbarkeit. In Android 7 konnte ich diese Änderung minimieren, indem ich den Track- Tint-Modus überschrieb. In Android 6 konnte ich jedoch keine anständigen Ergebnisse erzielen. Möglicherweise müssen Sie zusätzliche Farben definieren, die die Überblendung kompensieren. (Haben Sie jemals das Gefühl, dass Google nicht möchte, dass wir das Erscheinungsbild unserer Apps anpassen?)quelle
switchInput.setThumbTintList(buttonStates);
funktioniert auch für Nougat. API 21-22: Verwenden Sie den DrawableCompat wie von @Alexey vorgeschlagen. DasswitchInput.setButtonTintList(buttonStates);
hat bei mir nicht funktioniert, es hat die Zustände für meinen Switch nicht gefärbt. API unter 21:switchInput.getThumbDrawable().setColorFilter(someColor, PorterDuff.Mode.SrcIn);
Diese haben bei mir funktioniert. Ich habe auch mit Xamarin gearbeitet, also übersetzen Sie diese in den Android-Renderern in C #, wenn Sie Xamarin.Forms verwenden.Um den Switch-Stil zu ändern, ohne style.xml oder Java-Code zu verwenden, können Sie den Switch in Layout-XML anpassen:
Es ist das Attribut android: thumbTint und android: trackTint , mit dem Sie die Farbe anpassen können
Dies ist das visuelle Ergebnis für dieses XML:
quelle
app:thumbTint
anstelle vonandroid:thumbTint
und ändern Sieswitch
mitSwitchCompat
Erstellen Sie einen benutzerdefinierten Schalter und überschreiben Sie setChecked, um die Farbe zu ändern:
quelle
Während die Antwort von SubChord korrekt ist, wird die Frage, wie die "Ein" -Farbe eingestellt werden soll, nicht wirklich beantwortet, ohne auch andere Widgets zu beeinflussen. Verwenden Sie dazu a
ThemeOverlay
in styles.xml:Und verweisen Sie in Ihrem Schalter darauf:
Dies wirkt sich NUR auf die Farbe der Ansichten aus, auf die Sie es anwenden möchten.
quelle
Und in checker_track.xml:
quelle
thumbTint
gilt nur für Android API 21 und höher. Wie, wenn ich die Farbe unter Android 21 ändern möchte?Ich habe es gelöst, indem ich den Farbfilter aktualisiert habe, als der Status des Schalters geändert wurde ...
quelle
Möglicherweise ist es etwas spät, aber für Schaltflächen ist die Google-Schaltfläche nicht die Antwort. Sie müssen die Zeichenfolge im XML-Parameter des Schalters ändern:
quelle
zeichne "newthumb.xml"
und zeichne "newtrack.xml"
und füge es in Switch hinzu:
quelle
trackTint
oder vorschlagen kannthumbTint
. Man muss es manuell schreiben und es funktioniert.Definieren Sie es in Android Lollipop und höher in Ihrem Themenstil:
quelle
Erstellen Sie Ihr eigenes 9-Patch-Bild und legen Sie es als Hintergrund für die Umschalttaste fest.
http://radleymarx.com/2011/simple-guide-to-9-patch/
quelle
Die von Arlomedia vorgeschlagene Lösung hat bei mir funktioniert. In Bezug auf sein Problem mit der Extraspace habe ich das Entfernen aller Polster zum Schalter gelöst.
BEARBEITEN
Wie gewünscht, hier was ich habe.
In der Layoutdatei befindet sich mein Schalter in einem linearen Layout und nach einer Textansicht.
Da ich mit Xamarin / Monodroid (min. Android 4.1) arbeite, lautet mein Code:
swtch_EnableEdit wurde zuvor wie folgt definiert (Xamarin):
Ich setze überhaupt keine Auffüllungen und rufe nicht .setPadding (0, 0, 0, 0) auf.
quelle
Sie können einen benutzerdefinierten Stil für das Switch-Widget festlegen, bei dem standardmäßig ein Farbakzent verwendet wird, wenn Sie einen benutzerdefinierten Stil für das Widget verwenden
quelle
Sie können diese Bibliothek ausprobieren, einfach zu ändernde Farbe für die Umschalttaste.
https://github.com/kyleduo/SwitchButton
quelle
Versuchen Sie hier die richtige Antwort zu finden: Wählen Sie die Hintergrundfarbe von TextView aus . In zwei Worten sollten Sie Shape in XML mit Farbe erstellen und es dann in Ihrer Auswahl dem Status "Checked" zuweisen.
quelle
Ich weiß nicht, wie ich es mit Java machen soll, aber wenn Sie einen Stil für Ihre App definiert haben, können Sie diese Linie in Ihren Stil einfügen und Sie haben die gewünschte Farbe für mich, die ich verwendet habe # 3F51B5
quelle
Am einfachsten ist es, die Spurfarbe zu definieren und den Farbtonmodus auf src_over zu setzen, um 30% Transparenz zu entfernen.
toggle_style.xml
quelle
Als Ergänzung zu vorhandenen Antworten: Sie können Daumen und Spur mithilfe von Selektoren im
res/color
Ordner anpassen , zum Beispiel:switch_track_selector
switch_thumb_selector
Verwenden Sie diese Selektoren, um Spur- und Daumentöne anzupassen:
Beachten Sie, dass Standart
Switch
undandroid
Namespace für diese Attribute nur für API 23 und höher funktionieren. Verwenden Sie sie daherSwitchCompat
mitapp
Namespacexmlns:app="http://schemas.android.com/apk/res-auto"
als universelle Lösung.Ergebnis:
quelle
In XML können Sie die Farbe wie folgt ändern:
Dynamisch können Sie ändern als:
quelle
Lösung für Android Studio 3.6:
Ändert die Textfarbe eines in der XML-Farbdatei definierten Werts (yourColor).
quelle