Saya mencoba mengubah warna latar belakang TextView
widget Android saat pengguna menyentuhnya. Saya telah membuat selektor untuk tujuan itu, yang disimpan res/color/selector.xml
dan secara kasar terlihat seperti itu:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:color="@color/semitransparent_white"
/>
<item
android:color="@color/transparent"
/>
</selector>
The clickable
atribut dari TextView
ini true
, dalam kasus itu menarik.
Ketika saya menetapkan pemilih ini ke TextView
sebagai android:background="@color/selector"
, saya mendapatkan pengecualian berikut saat runtime:
ERROR / AndroidRuntime (13130): Disebabkan oleh: org.xmlpull.v1.XmlPullParserException: Baris file XML biner # 6: tag memerlukan atribut 'drawable' atau tag turunan yang mendefinisikan drawable
Saat saya mengubah atribut menjadi drawable, ini berfungsi, tetapi hasilnya terlihat salah karena ID tampaknya ditafsirkan sebagai referensi gambar, bukan referensi warna (seperti yang disarankan "drawable").
Yang membingungkan saya adalah saya dapat menetapkan referensi warna, misalnya "@ color / black", sebagai atribut latar belakang secara langsung. Ini bekerja seperti yang diharapkan. Menggunakan selektor tidak berfungsi.
Saya juga dapat menggunakan selektor sebagai textColor
tanpa masalah.
Apa cara yang benar untuk menerapkan pemilih warna latar belakang ke TextView
di Android?
Jawaban:
Masalahnya di sini adalah Anda tidak dapat menentukan warna latar belakang menggunakan pemilih warna, Anda memerlukan pemilih yang dapat digambar . Jadi, perubahan yang diperlukan akan terlihat seperti ini:
Anda juga perlu memindahkan sumber daya tersebut ke
drawable
direktori yang lebih masuk akal karena ini bukan pemilih warna.Maka Anda harus membuat
res/drawable/selected_state.xml
file seperti ini:dan akhirnya, Anda akan menggunakannya seperti ini:
Catatan : alasan mengapa OP mendapatkan sumber gambar yang digambar mungkin karena dia mencoba untuk hanya mereferensikan sumber dayanya yang masih dalam direktori warna tetapi menggunakannya
@drawable
sehingga dia berakhir dengan benturan ID, memilih sumber daya yang salah.Semoga ini masih dapat membantu seseorang bahkan jika OP mungkin telah, saya harap, menyelesaikan masalahnya sekarang.
sumber
Solusi Benoit berfungsi, tetapi Anda benar-benar tidak perlu mengeluarkan biaya overhead untuk menggambar bentuk. Karena warna bisa digambar, cukup tentukan warna dalam file /res/values/colors.xml:
Dan kemudian gunakan seperti itu di pemilih Anda:
sumber
Solusi yang lebih sederhana untuk hal di atas:
Simpan itu di folder drawable dan Anda siap menggunakannya.
sumber
<item android:state_pressed="true" android:color="@color/vantablack"/>
terlihat semantik identik dengan<item android:state_pressed="true"><color android:color="@color/vantablack"/></item>
Bahkan ini berhasil.
Saya menambahkan
android:drawable
atribut ke setiap item, dan nilainya adalah warna.Ngomong-ngomong, mengapa mereka mengatakan itu
color
adalah salah satu atribut dariselector
? Mereka tidak menulis ituandroid:drawable
wajib.Sumber Daya Daftar Status Warna
sumber
Bagi yang mencari untuk melakukannya tanpa membuat sektor latar belakang, cukup tambahkan baris tersebut ke
TextView
Juga untuk membuatnya dapat dipilih, gunakan:
sumber