Saya menggunakan kontrol Switch standar dengan tema holo.light di aplikasi ICS.
Saya ingin mengubah warna yang disorot atau pada status Toggle Button dari standar biru muda ke hijau.
Ini seharusnya mudah, tetapi sepertinya saya tidak tahu bagaimana melakukannya.
android
togglebutton
James Sugrue
sumber
sumber
Switch
pemilih kustom ini setelahnya.Jawaban:
Sampai sekarang lebih baik menggunakan SwitchCompat dari perpustakaan AppCompat.v7. Anda kemudian dapat menggunakan gaya sederhana untuk mengubah warna komponen Anda.
ref: Android Developers Blog
EDIT :
Cara penerapannya dengan benar dilakukan melalui
android:theme="@style/Theme.MyTheme"
dan ini juga dapat diterapkan pada gaya induk seperti EditTexts, RadioButtons, Switches, CheckBoxes, dan ProgressBars:sumber
colorAccent
, 'off' iscolorSwitchThumbNormal
. Jika menggunakanAppCompat
tema, Anda harus menggunakanSwitchCompat
daripadaSwitch
. Jika menggunakan SDK 23+, Anda dapat menggunakanandroid:thumbTint
danandroid:thumbTintMode
denganColorStateList
.Terlambat ke pesta tapi ini yang kulakukan
Gaya
Warna
Tata letak
Hasil
Lihat perubahan warna untuk sakelar aktif dan nonaktif
sumber
SwitchCompat
;)Ini berfungsi untuk saya (membutuhkan Android 4.1):
Perhatikan bahwa status "default" perlu ditambahkan terakhir seperti yang ditunjukkan di sini.
Satu-satunya masalah yang saya lihat adalah "ibu jari" dari switch sekarang tampak lebih besar dari latar belakang atau "track" dari switch. Saya pikir itu karena saya masih menggunakan gambar trek default, yang memiliki beberapa ruang kosong di sekitarnya. Namun, ketika saya mencoba untuk menyesuaikan gambar trek menggunakan teknik ini, saklar saya tampaknya memiliki ketinggian 1 piksel dengan hanya sepotong teks yang hidup / mati muncul. Pasti ada solusi untuk itu, tapi saya belum menemukannya ...
Pembaruan untuk Android 5
Di Android 5, kode di atas membuat peralihan menghilang sepenuhnya. Kita harus dapat menggunakan metode setButtonTintList baru , tetapi ini tampaknya diabaikan untuk switch. Tapi ini berhasil:
Pembaruan untuk Android 6-7
Seperti yang dinyatakan Cheruby dalam komentar, kita bisa menggunakan yang baru
setThumbTintList
dan itu berfungsi seperti yang diharapkan untuk saya. Kita juga bisa menggunakansetTrackTintList
, tetapi itu menerapkan warna sebagai campuran, dengan hasil yang lebih gelap dari yang diharapkan dalam tema warna gelap dan lebih terang dari yang diharapkan dalam tema warna terang, kadang-kadang sampai tidak terlihat. Di Android 7, saya bisa meminimalkan perubahan itu dengan mengganti mode track tint , tapi saya tidak bisa mendapatkan hasil yang layak dari itu di Android 6. Anda mungkin perlu menentukan warna tambahan yang mengimbangi blending. (Apakah Anda pernah merasa bahwa Google tidak ingin kami menyesuaikan tampilan aplikasi kami?)sumber
switchInput.setThumbTintList(buttonStates);
berfungsi untuk Nougat. API 21-22: Gunakan DrawableCompat seperti yang disarankan oleh @Alexey. ItuswitchInput.setButtonTintList(buttonStates);
tidak bekerja untuk saya, itu tidak mewarnai keadaan untuk Switch saya. API di bawah 21:switchInput.getThumbDrawable().setColorFilter(someColor, PorterDuff.Mode.SrcIn);
Ini berfungsi untuk saya. Saya bekerja dengan Xamarin juga, jadi terjemahkan ke C # di Android renderers jika Anda menggunakan Xamarin.Untuk mengubah Beralih gaya tanpa menggunakan style.xml atau kode Java, Anda dapat menyesuaikan beralih ke tata letak XML:
Itu atribut android: thumbTint dan android: trackTint yang memungkinkan Anda untuk menyesuaikan warna
Ini adalah hasil visual untuk XML ini:
sumber
app:thumbTint
alih-alihandroid:thumbTint
dan ubahswitch
denganSwitchCompat
Buat Switch kustom dan ganti setChecked untuk mengubah warna:
sumber
Sementara jawaban oleh SubChord benar, apakah tidak benar-benar menjawab pertanyaan tentang cara mengatur warna "on" tanpa juga mempengaruhi widget lainnya. Untuk melakukan ini, gunakan a
ThemeOverlay
di styles.xml:Dan referensi di saklar Anda:
Dengan melakukan hal itu HANYA akan memengaruhi warna tampilan yang ingin Anda terapkan.
sumber
Dan di dalam checker_track.xml:
sumber
thumbTint
hanya berlaku di Android API 21 ke atas. Bagaimana jika saya ingin mengubah warna di bawah Android 21?Saya menyelesaikannya dengan memperbarui Filter Warna ketika status Switch diubah ...
sumber
Mungkin agak terlambat, tetapi untuk tombol sakelar, tombol toogle bukan jawabannya, Anda harus mengubah yang dapat ditarik di parameter xml sakelar:
sumber
buat drawable "newthumb.xml"
dan buat "newtrack.xml" yang dapat digambar
dan tambahkan di Switch:
sumber
trackTint
atauthumbTint
. Orang perlu menulisnya secara manual dan itu berfungsi.Di Android Lollipop dan di atasnya, tentukan dengan gaya tema Anda:
sumber
Buat gambar 9-patch Anda sendiri dan atur sebagai latar belakang tombol sakelar.
http://radleymarx.com/2011/simple-guide-to-9-patch/
sumber
Solusi yang disarankan dari arlomedia bekerja untuk saya. Tentang masalah ekstraspace-nya, saya memutuskan untuk menghapus semua bantalan pada sakelar.
EDIT
Seperti yang diminta, di sini apa yang saya miliki.
Dalam file tata letak, sakelar saya berada di dalam tata letak linier dan setelah TextView.
Karena saya bekerja dengan Xamarin / Monodroid (min. Android 4.1) kode saya adalah:
swtch_EnableEdit sebelumnya didefinisikan seperti ini (Xamarin):
Saya tidak mengatur semua paddings dan saya tidak memanggil .setPadding (0, 0, 0, 0).
sumber
Anda dapat membuat style khusus untuk widget switch yang menggunakan aksen warna sebagai default ketika melakukan style khusus untuk itu
sumber
Anda dapat mencoba lib ini, mudah untuk mengubah warna untuk tombol sakelar.
https://github.com/kyleduo/SwitchButton
sumber
Cobalah untuk menemukan jawaban yang benar di sini: Selektor pada warna latar belakang TextView . Dalam dua kata Anda harus membuat Bentuk dalam XML dengan warna dan kemudian menetapkannya untuk menyatakan "dicentang" di pemilih Anda.
sumber
Saya tidak tahu cara melakukannya dari java, tetapi jika Anda memiliki gaya yang ditentukan untuk aplikasi Anda, Anda dapat menambahkan baris ini dalam gaya Anda dan Anda akan memiliki warna yang diinginkan untuk saya, saya telah menggunakan # 3F51B5
sumber
Cara termudah adalah menentukan rona trek, dan mengatur mode rona ke src_over untuk menghapus transparansi 30%.
toggle_style.xml
sumber
Sebagai tambahan untuk jawaban yang ada: Anda dapat menyesuaikan ibu jari dan melacak menggunakan penyeleksi dalam
res/color
folder, misalnya:switch_track_selector
switch_thumb_selector
Gunakan penyeleksi ini untuk mengubahsuaikan warna trek dan ibu jari:
Perlu diingat bahwa jika Anda menggunakan standar
Switch
danandroid
namespace untuk atribut ini, itu hanya akan berfungsi untuk API 23 dan yang lebih baru, jadi gunakanSwitchCompat
denganapp
namespacexmlns:app="http://schemas.android.com/apk/res-auto"
sebagai solusi universal.Hasil:
sumber
Dalam xml, Anda dapat mengubah warna sebagai:
Secara dinamis Anda dapat berubah sebagai:
sumber
Solusi untuk Android Studio 3.6:
Mengubah warna teks dalam nilai XML file yang ditentukan warna (warna Anda).
sumber