Apakah mungkin untuk menerapkan latar belakang khusus ke setiap item Listview melalui pemilih daftar?
Path menetapkan pemilih standar @android:color/transparent
untuk state_focused="false"
kasus, tetapi mengubah ini untuk beberapa ditarik kustom tidak mempengaruhi item yang tidak dipilih. Romain Guy sepertinya menyarankan dalam jawaban ini bahwa ini mungkin.
Saat ini saya mencapai pengaruh yang sama dengan menggunakan latar belakang khusus pada setiap tampilan dan menyembunyikannya ketika item dipilih / difokuskan / apa pun sehingga selektornya ditampilkan, tetapi akan lebih elegan jika semua ini ditentukan di satu tempat.
Sebagai referensi, ini adalah pemilih yang saya gunakan untuk mencoba dan membuat ini berfungsi:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="false"
android:drawable="@drawable/list_item_gradient" />
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true" android:state_enabled="false"
android:state_pressed="true"
android:drawable="@drawable/list_selector_background_disabled" />
<item android:state_focused="true" android:state_enabled="false"
android:drawable="@drawable/list_selector_background_disabled" />
<item android:state_focused="true" android:state_pressed="true"
android:drawable="@drawable/list_selector_background_transition" />
<item android:state_focused="false" android:state_pressed="true"
android:drawable="@drawable/list_selector_background_transition" />
<item android:state_focused="true"
android:drawable="@drawable/list_selector_background_focus" />
</selector>
Dan inilah cara saya menyetel pemilih:
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:listSelector="@drawable/list_selector_background" />
Terima kasih sebelumnya atas bantuannya!
Solusi oleh dglmtn tidak berfungsi jika Anda memiliki drawable 9-patch dengan padding sebagai latar belakang. Hal-hal aneh terjadi, saya bahkan tidak ingin membicarakannya, jika Anda memiliki masalah seperti itu, Anda tahu mereka.
Sekarang, Jika Anda ingin memiliki listview dengan status berbeda dan 9-patch drawable (ini akan bekerja dengan drawable dan warna apa pun, menurut saya) Anda harus melakukan 2 hal:
Yang harus Anda lakukan adalah mengatur row_selector.xml terlebih dahulu:
Jangan lupakan
android:state_selected
. Ini berfungsi sepertiandroid:state_focused
untuk daftar, tetapi diterapkan untuk item daftar.Sekarang terapkan selektor ke item (row.xml):
Buat pemilih transparan untuk daftar:
Ini harus melakukan hal itu.
sumber
Jangan pernah menggunakan "warna latar belakang" untuk baris tampilan daftar Anda ...
ini akan memblokir setiap tindakan pemilih (adalah masalah saya!)
semoga berhasil!
sumber
setBackgroundColor
dengan "warna". Sigh ... GunakansetBackground
atausetBackgroundDrawable
sesuai dengan versi API Anda dengan selector.Artikel "Mengapa daftar saya hitam? Pengoptimalan Android" di Blog Pengembang Android memiliki penjelasan lengkap tentang mengapa latar belakang daftar menjadi hitam saat di-scroll. Jawaban sederhana: setel cacheColorHint pada daftar Anda menjadi transparan (# 00000000).
sumber
Cukup, jika Anda memasukkan
list_row_layout.xml
:listitem_selector.xml:
sumber
dari pada:
menulis
sumber
Anda bisa menulis tema:
theme.xml
styles.xml
my_selector adalah keinginan Anda untuk memilih custom selector. Maaf, saya tidak tahu cara menulis kode saya
sumber
Saya tidak yakin bagaimana mendapatkan efek yang Anda inginkan melalui selektor itu sendiri - lagipula, menurut definisi, ada satu pemilih untuk seluruh daftar.
Namun, Anda dapat mengontrol perubahan pilihan dan menggambar apa pun yang Anda inginkan. Dalam proyek contoh ini , saya membuat selektor transparan dan menggambar bilah pada item yang dipilih.
sumber
<item android:state_focused="false" android:drawable="@android:color/transparent" />
klausa di pemilih default.Saya selalu menggunakan metode yang sama dan berhasil setiap saat, di mana saja: Saya hanya menggunakan selektor seperti ini
dan setel pada ListView (INI SANGAT PENTING UNTUK MEMBUATNYA) atribut
untuk textColor cukup letakkan di folder warna (PENTING, bukan folder drawable!) selektor seperti ini
ini contoh template baris
semuanya menunjukkan pekerjaan tanpa solusi yang membosankan. berharap bantuan ini
sumber
Tim FrostWire di sini.
Semua api sampah pemilih tidak berfungsi seperti yang diharapkan. Setelah mencoba semua solusi yang disajikan di utas ini tidak berhasil, kami baru saja menyelesaikan masalah pada saat menggembungkan Item ListView.
Pastikan item Anda mempertahankan statusnya, kami melakukannya sebagai variabel anggota MenuItem (boolean dipilih)
Saat Anda memekarkan, tanyakan apakah item yang mendasarinya dipilih, jika demikian, cukup setel sumber daya dapat digambar yang Anda inginkan sebagai latar belakang (baik itu 9patch atau apa pun). Pastikan adaptor Anda mengetahui hal ini dan memanggil notifyDataChanged () ketika sesuatu telah dipilih.
Akan sangat bagus jika penyeleksi benar-benar berfungsi, secara teori ini adalah solusi yang bagus dan elegan, tetapi sepertinya itu rusak. CIUMAN.
sumber