Używam standardowego elementu sterującego przełącznikiem z motywem holo.light w aplikacji ICS.
Chcę zmienić podświetlony lub włączony kolor przycisku przełącznika ze standardowego jasnoniebieskiego na zielony.
To powinno być łatwe, ale nie mam pojęcia, jak to zrobić.
android
togglebutton
JamesSugrue
źródło
źródło
Switch
później wskazać tego selektora niestandardowego.Odpowiedzi:
Od teraz lepiej jest używać SwitchCompat z biblioteki AppCompat.v7. Następnie możesz użyć prostego stylu, aby zmienić kolor komponentów.
ref: Blog deweloperów Androida
EDYCJA :
Sposób, w jaki powinien być poprawnie zastosowany, przebiega
android:theme="@style/Theme.MyTheme"
i można go również zastosować do stylów nadrzędnych, takich jak EditTexts, RadioButtons, Switches, CheckBoxes i ProgressBars:źródło
colorAccent
, „off” jestcolorSwitchThumbNormal
. Jeśli korzystasz zAppCompat
motywu, musisz użyćSwitchCompat
zamiastSwitch
. Jeśli używasz SDK 23+, możesz używaćandroid:thumbTint
iandroid:thumbTintMode
zColorStateList
.Spóźniony na imprezę, ale tak to zrobiłem
Styl
Zabarwienie
Układ
Wynik
Zobacz zmianę kolorów dla włączników i wyłączników
źródło
SwitchCompat
;)To działa dla mnie (wymaga Androida 4.1):
Zauważ, że stan „domyślny” należy dodać jako ostatni, jak pokazano tutaj.
Jedynym problemem, jaki widzę, jest to, że „kciuk” przełącznika wydaje się teraz większy niż tło lub „ścieżka” przełącznika. Myślę, że to dlatego, że nadal używam domyślnego obrazu ścieżki, który ma wokół niego puste miejsce. Jednak gdy próbowałem dostosować obraz ścieżki za pomocą tej techniki, mój przełącznik wydawał się mieć wysokość 1 piksela z pojawianiem się tylko kawałka tekstu włączania / wyłączania. Musi być na to rozwiązanie, ale jeszcze go nie znalazłem ...
Aktualizacja dla Androida 5
W systemie Android 5 powyższy kod powoduje całkowite zniknięcie przełącznika. Powinniśmy móc użyć nowej metody setButtonTintList , ale wydaje się, że jest to ignorowane w przypadku przełączników. Ale to działa:
Aktualizacja dla Androida 6-7
Jak stwierdził Cheruby w komentarzach, możemy użyć nowego
setThumbTintList
i działało zgodnie z oczekiwaniami. Możemy również użyćsetTrackTintList
, ale to powoduje, że kolor jest mieszanką, w wyniku czego jest ciemniejszy niż oczekiwano w motywach o ciemnych kolorach i jaśniejszy niż oczekiwano w motywach o jasnych kolorach, czasem do tego stopnia, że jest niewidoczny. W systemie Android 7 udało mi się zminimalizować tę zmianę, zastępując tryb odcień ścieżki , ale nie mogłem uzyskać przyzwoitych wyników w Androidzie 6. Być może będziesz musiał zdefiniować dodatkowe kolory, które kompensują mieszanie. (Czy kiedykolwiek miałeś wrażenie, że Google nie chce, abyśmy dostosowywali wygląd naszych aplikacji?)źródło
switchInput.setThumbTintList(buttonStates);
działa również dla Nougat. API 21-22: użyj DrawableCompat zgodnie z sugestią @Alexey. ToswitchInput.setButtonTintList(buttonStates);
nie działało dla mnie, nie pokolorowało stanów dla mojego Switcha. API poniżej 21:switchInput.getThumbDrawable().setColorFilter(someColor, PorterDuff.Mode.SrcIn);
Te działały dla mnie. Pracowałem również z platformą Xamarin, więc przetłumacz je na język C # w mechanizmach renderujących systemu Android, jeśli używasz platformy Xamarin.Forms.Aby zmienić styl przełączania bez używania style.xml lub kodu Java, możesz dostosować przełącznik do formatu XML układu:
Jest to atrybut android: thumbTint i android: trackTint, który umożliwia dostosowanie koloru
Oto wizualny wynik dla tego XML:
źródło
app:thumbTint
zamiastandroid:thumbTint
i zmień zaswitch
pomocąSwitchCompat
Utwórz niestandardowy przełącznik i nadpisz zestaw Zaznaczone, aby zmienić kolor:
źródło
Chociaż odpowiedź SubChord jest poprawna, tak naprawdę nie odpowiada na pytanie, jak ustawić kolor „włączony” bez wpływu również na inne widżety. Aby to zrobić, użyj a
ThemeOverlay
w styles.xml:I odwołaj się do tego w swoim przełączniku:
W ten sposób wpłynie to TYLKO na kolor widoków, do których chcesz go zastosować.
źródło
A wewnątrz checker_track.xml:
źródło
thumbTint
dotyczy tylko Android API 21 i nowszych. Jak, jeśli chcę zmienić kolor poniżej Androida 21?Rozwiązałem to, aktualizując filtr kolorów, gdy stan przełącznika został zmieniony ...
źródło
Może być trochę za późno, ale w przypadku przycisków przełącznika przycisk toogle nie jest odpowiedzią, należy zmienić rysowany w parametrze xml przełącznika:
źródło
uczyń możliwym do rysowania „newthumb.xml”
i utwórz plik „newtrack.xml” do rysowania
i dodaj go w Switch:
źródło
trackTint
lubthumbTint
. Trzeba to wpisać ręcznie i działa.W systemie Android Lollipop i nowszych wersjach zdefiniuj go w swoim stylu motywu:
źródło
Stwórz własny obraz z 9 patchami i ustaw go jako tło przycisku przełączania.
http://radleymarx.com/2011/simple-guide-to-9-patch/
źródło
Rozwiązanie zaproponowane przez arlomedia sprawdziło się u mnie. O jego kwestii ekstraprzestrzeni rozwiązałem usuwając wszystkie wyściółki do przełącznika.
EDYTOWAĆ
Zgodnie z prośbą, oto co mam.
W pliku układu mój przełącznik znajduje się w układzie liniowym i po TextView.
Ponieważ pracuję z Xamarin / Monodroid (min. Android 4.1) mój kod to:
swtch_EnableEdit został wcześniej zdefiniowany w ten sposób (Xamarin):
Nie ustawiam wszystkich dopełnień i nie wywołuję .setPadding (0, 0, 0, 0).
źródło
możesz utworzyć niestandardowy styl dla widgetu przełącznika, który używa akcentu kolorystycznego jako domyślnego, gdy tworzysz dla niego niestandardowy styl
źródło
Możesz wypróbować tę bibliotekę, łatwo zmienić kolor przycisku przełącznika.
https://github.com/kyleduo/SwitchButton
źródło
Spróbuj znaleźć właściwą odpowiedź tutaj: Selektor koloru tła TextView . W dwóch słowach powinieneś utworzyć Shape w XML z kolorem, a następnie przypisać go do stanu „zaznaczone” w selektorze.
źródło
Nie wiem, jak to zrobić z javy, ale jeśli masz zdefiniowany styl dla swojej aplikacji, możesz dodać tę linię w swoim stylu i będziesz miał dla mnie pożądany kolor, użyłem # 3F51B5
źródło
Najłatwiejszym sposobem jest zdefiniowanie odcienia ścieżki i ustawienie trybu odcienia na src_over, aby usunąć 30% przezroczystości.
toggle_style.xml
źródło
Jako dodatek do istniejących odpowiedzi: możesz dostosować kciuk i ścieżkę za pomocą selektorów w
res/color
folderze, na przykład:switch_track_selector
switch_thumb_selector
Użyj tych selektorów, aby dostosować odcienie ścieżki i kciuka:
Należy pamiętać, że jeśli używasz standart
Switch
iandroid
nazw dla tych atrybutów, to będzie działać tylko do API 23 i później, więc użytkuSwitchCompat
zapp
nazwxmlns:app="http://schemas.android.com/apk/res-auto"
jako uniwersalnego rozwiązania.Wynik:
źródło
W xml możesz zmienić kolor jako:
Dynamicznie możesz zmieniać jako:
źródło
Rozwiązanie dla Android Studio 3.6:
Zmienia kolor tekstu a w wartości zdefiniowanej w pliku koloru XML (yourColor).
źródło