Saya menggunakan appcompat v7 untuk mendapatkan tampilan yang konsisten pada Android 5 dan kurang. Ini bekerja dengan baik. Namun saya tidak tahu bagaimana cara mengubah warna garis bawah dan warna aksen untuk EditTexts. Apa itu mungkin?
Saya telah mencoba untuk mendefinisikan suatu kustom android:editTextStyle
(lih. Di bawah) tetapi saya hanya berhasil mengubah warna latar belakang penuh atau warna teks tetapi bukan garis bawah atau warna aksen. Apakah ada nilai properti tertentu untuk digunakan? saya harus menggunakan gambar yang dapat ditarik kustom melaluiandroid:background
properti? apakah tidak mungkin untuk menentukan warna dalam heksa?
<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:editTextStyle">@style/Widget.App.EditText</item>
</style>
<style name="Widget.App.EditText" parent="Widget.AppCompat.EditText">
???
</style>
Menurut sumber Android 21 API, EditText dengan desain material tampaknya menggunakan colorControlActivated
dan colorControlNormal
. Oleh karena itu, saya telah mencoba menimpa properti ini dalam definisi style sebelumnya tetapi tidak berpengaruh. Mungkin appcompat tidak menggunakannya. Sayangnya, saya tidak dapat menemukan sumber untuk appcompat versi terakhir dengan desain material.
AppCompatEditText
, rupanya.Jawaban:
Akhirnya, saya menemukan solusinya. Ini hanya terdiri dari mengesampingkan nilai untuk
colorControlActivated
,colorControlHighlight
dancolorControlNormal
dalam definisi tema aplikasi Anda dan bukan gaya edittext Anda. Kemudian, pikirkan untuk menggunakan tema ini untuk aktivitas apa pun yang Anda inginkan. Di bawah ini adalah contohnya:sumber
android:theme="@style/Theme.App.Base
. Ini akan memastikan gaya tidak akan memengaruhi tampilan lain di tata letak Anda yang tidak ingin Anda ubah.AppCompatActivity
. Ini tidak akan berfungsi jika diwarisi dariActivity
.Saya merasa seperti ini membutuhkan jawaban jika seseorang ingin mengubah hanya satu edittext. Saya melakukannya seperti ini:
sumber
Sementara solusi Laurents benar, ia datang dengan beberapa kelemahan seperti yang dijelaskan dalam komentar karena tidak hanya garis bawah yang
EditText
akan diwarnai tetapi Tombol KembaliToolbar
,CheckBoxes
dll juga.Untungnya
v22.1
dariappcompat-v7
memperkenalkan beberapa kemungkinan baru. Sekarang mungkin untuk menetapkan tema tertentu hanya untuk satu tampilan. Langsung dari Changelog :Jadi alih-alih mengatur warna yang diinginkan dalam tema global, kami membuat yang baru dan menetapkannya hanya untuk
EditText
.Contoh:
sumber
colorControlNormal
tanpa awalan android menggunakan metode appcompat untuk mewarnai widget sementara dengan awalan itu mundur ke metode sistem dan ini hanya tersedia di perangkat API 21+.22.2.0
versi AppCompat tetapi trik ini tidak berhasil :(Ini dapat diubah dalam XML dengan menggunakan:
Untuk Referensi API> = 21 penggunaan kompatibilitas:
Untuk API mundur <21 penggunaan kompatibilitas:
sumber
backgroundTint="@color/blue"
alih-alihandroid:backgroundTint="@color/blue"
untuk dukungan yang kompatibel ke belakangandroid:backgroundTint="@color/blue"
, gunakanapp:backgroundTint="@color/blue"
untuk mendukung perangkat pra-Lollipop, terima kasih atas komentar Anda!tools:ignore="MissingPrefix"
jika garis bawah merah muncul di bawahapp:backgroundTint="<your color>"
Berikut ini solusi untuk API <21 ke atas
Semoga ini bisa membantu
sumber
24.2.1
,25.1.1
,25.2.0
untuk perangkat <21 dan> 21 dan masih bekerja. Silakan periksa demo drive sederhana ini.google.com/file/d/0B_poNaia6t8kSzU3bDFVazRSSDA/… . Saya tidak tahu mengapa kode ini tidak berhasil untuk Anda, jadi beri tahu saya. terima kasihJawaban yang diterima sedikit lebih per hal dasar gaya, tetapi hal yang paling efisien untuk dilakukan adalah menambahkan atribut colorAccent dalam gaya AppTheme Anda seperti ini:
Atribut colorAccent digunakan untuk pewarnaan widget di seluruh aplikasi dan karenanya harus digunakan untuk konsistensi
sumber
name="android:colorAccent"
secara keliruJika Anda menggunakan,
appcompat-v7:22.1.0+
Anda dapat menggunakan DrawableCompat untuk mewarnai widget Andasumber
Menggunakan:
Ini akan mendukung perangkat pra-Lollipop tidak hanya +21
sumber
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
dan seharusnya bekerjasumber
Salah satu solusi cepat untuk masalah Anda adalah dengan melihat di appappackage / build / intermediates / exploded-aar / com.android.support / appcompat-v7 / res / drawable / untuk abc_edit_text_material.xml dan salin file xml tersebut di folder yang dapat digambar. Kemudian Anda dapat mengubah warna 9 file tambalan dari dalam pemilih ini, agar sesuai dengan preferensi Anda.
sumber
Sangat mudah, cukup tambahkan
android:backgroundTint
atribut di blog AndaEditText
.sumber
app:backgroundTint="@color/blue"
bekerja pada semua level api .. walaupun untuk alasan apa pun itu masih berubah menjadi warna yang berbeda ketika dipilih XDBerikut ini adalah bagian dari kode sumber
TextInputLayout
di perpustakaan desain dukungan ( DIPERBARUI untuk versi 23.2.0 ), yang mengubahEditText
warna garis bawah dengan cara yang lebih sederhana:Tampaknya semua kode di atas menjadi tidak berguna saat ini di 23.2.0 jika Anda ingin mengubah warna secara programatis.
Dan jika Anda ingin mendukung semua platform, berikut adalah metode saya:
sumber
Saya juga terjebak pada masalah ini terlalu lama.
Saya membutuhkan solusi yang berfungsi untuk versi di atas dan di bawah v21.
Saya akhirnya menemukan solusi yang sangat sederhana, mungkin tidak ideal, tetapi efektif: Cukup atur warna latar belakang ke
transparent
dalam properti EditText.Saya harap ini menghemat waktu seseorang.
sumber
Bagi saya, saya memodifikasi AppTheme dan nilai colors.xml Baik colorControlNormal dan colorAccent membantu saya mengubah warna perbatasan EditText. Serta kursor, dan "|" ketika di dalam EditText.
Berikut adalah colors.xml
Saya mengeluarkan atribut android: textCursorDrawable ke @null yang saya tempatkan di dalam gaya editText. Ketika saya mencoba menggunakan ini, warnanya tidak akan berubah.
sumber
Anda dapat mengatur latar belakang edittext ke persegi panjang dengan bantalan minus di sebelah kiri, kanan dan atas untuk mencapai ini. Berikut ini adalah contoh xml:
Ganti bentuk dengan pemilih jika Anda ingin memberikan lebar dan warna yang berbeda untuk edittext fokus.
sumber
Di Activit.XML tambahkan kode
Di mana
BackgroundTint=color
untuk warna yang Anda inginkansumber
Saya menggunakan metode ini untuk mengubah warna garis dengan PorterDuff, tanpa dapat digambar lainnya.
sumber
Jika Anda ingin mengubah garis bawah tanpa menggunakan warna aplikasi, gunakan baris ini dalam tema Anda:
Saya tidak tahu solusi lain.
sumber
Saya mencari solusi untuk masalah ini setelah 2 hari perjuangan, solusi di bawah ini sangat cocok untuk mereka yang ingin mengubah beberapa teks saja, mengubah / mengganti warna melalui kode java, dan ingin mengatasi masalah perilaku yang berbeda pada versi OS karena menggunakan metode setColorFilter ().
Gunakan dalam xml
Tambahkan garis dalam gaya
kode java untuk beralih warna
sumber
Saya benar-benar bingung dengan masalah ini. Saya telah mencoba segala yang ada di utas ini, dan di yang lain, tetapi apa pun yang saya lakukan, saya tidak dapat mengubah warna garis bawah menjadi apa pun selain biru default.
Saya akhirnya menemukan apa yang sedang terjadi. Saya (salah) menggunakan
android.widget.EditText
ketika membuat contoh baru (tetapi komponen saya yang lain berasal dari pustaka appcompat). Seharusnya saya gunakanandroid.support.v7.widget.AppCompatEditText
. Saya digantinew EditText(this)
dengannew AppCompatEditText(this)
dan masalah langsung diselesaikan. Ternyata, jika Anda benar-benar menggunakanAppCompatEditText
, itu hanya akan menghormatiaccentColor
dari tema Anda (sebagaimana disebutkan dalam beberapa komentar di atas) dan tidak ada konfigurasi tambahan yang diperlukan.sumber
Ini adalah yang termudah dan paling efisien / dapat digunakan kembali / berfungsi di semua API.
Buat kelas EditText kustom seperti:
Kemudian gunakan seperti ini:
sumber
Untuk mengubah latar belakang EditText secara dinamis, Anda dapat menggunakan ColorStateList .
Penghargaan: Jawaban SO tentang ColorStateList ini luar biasa .
sumber
Tambahkan
app:backgroundTint
untuk api level 21 di bawah ini. Jika tidak gunakanandroid:backgroundTint
.Untuk api di bawah level 21.
Untuk yang lebih tinggi dari level api 21.
sumber
Silakan modifikasi metode ini sesuai dengan kebutuhan Anda. Ini berhasil untuk saya!
sumber