Saya telah membuat widget khusus, dan saya mendeklarasikannya di layout.xml. Saya juga telah menambahkan beberapa atribut khusus di attr.xml. Namun, ketika mencoba mendeklarasikan atribut ini dalam style di styles.xml, itu memberi sayaNo resource found that matches the given name: attr 'custom:attribute'.
Saya telah memasukkan xmlns:custom="http://schemas.android.com/apk/res/com.my.package"
semua tag di styles.xml, termasuk <?xml>
,, <resources>
dan <style>
, tetapi masih memberi saya kesalahan yang sama, sehingga tidak dapat menemukan namespace XML khusus saya.
Namun, saya dapat menggunakan namespace saya untuk secara manual menetapkan atribut ke tampilan di layout.xml saya, jadi tidak ada yang salah dengan namespace. Masalah saya terletak pada membuat styles.xml mengetahui attr.xml saya.
sumber
cutsom:xmlns=...
?? seharusnya tidakxmlns:cutsom=...
?Jawaban:
Saya menemukan jawabannya! Jawabannya adalah untuk TIDAK menentukan namespace dalam style.
sumber
declare-stylable
bukan enum. Saya tidak yakin mengapa enum tidak berfungsi, tetapi upaya ini cukup baik untuk saya.jawaban di atas bekerja untuk saya, saya mencoba perubahan kecil, saya menyatakan gaya untuk kelas dalam elemen sumber daya.
dalam menyatakan-gaya , atribut nama mereferensikan nama kelas, jadi saya memiliki panggilan kelas tampilan "com.my.package.name.VerticalView", itu menyatakan pernyataan ini harus digunakan dalam VerticalView atau subkelas VerticalView. jadi kita dapat mendeklarasikan gaya seperti ini:
itu sebabnya kami tidak mendeklarasikan namespace di elemen sumber daya, itu masih berfungsi.
sumber
values / styles.xml
nilai / attrs.xml
values / colors.xml
nilai / dimens.xml
Menggunakan
DEMO
sumber
Modifikasi Styler dan vince bekerja untuk saya. Saya ingin menunjukkan bahwa penjelasan @ vince mungkin tidak sepenuhnya akurat.
Untuk menguji hipotesis bahwa atribut nama yang
declare-styleable
cocok dengan nama kelas tampilan kustom memungkinkan kami untuk mengakses atribut kustom tanpa namespace saya mengubah namadeclare-styleable
(tampilan kustom bernamaTestViewFont
:Saya kemudian mengubah
obtainStyledAttributes
panggilan dalam tampilan kustom untuk mencerminkan ini:Kode masih berjalan. Jadi saya tidak berpikir itu semacam introspeksi oleh
declare-styleable
kelas yang dinamai.Jadi saya dituntun untuk percaya bahwa atribut kustom apa pun dapat digunakan untuk mendeklarasikan gaya tanpa merujuk ke namespace.
Bagaimanapun, terima kasih atas semua bantuannya, ini menyelesaikan masalah saya.
sumber
declare-styleable
blok atau tidak. (maaf, saya tidak dapat menemukan halaman referensi untuk ini ...) Kecuali untuk atribut dariandroid
namespace, Anda hanya boleh menunjukkan nama atribut.Tentukan beberapa atribut
Gunakan dalam file layout seperti
Akhirnya gunakan dalam file gaya
Perbedaan antara file gaya dan file tata letak adalah kita tidak menambahkan prefiexapp:
Cobalah, semoga harimu menyenangkan, ini bekerja untukku.
sumber
Jika itu membantu orang lain, kesalahan saya adalah kelas tampilan kustom saya memanggil AttributeSet.getAttributeValue misalnya
... yang mengakibatkan atribut khusus saya tidak dibaca untuk tampilan kustom saya.
Perbaikannya adalah untuk digunakan
obtainStyledAttributes
dalam tampilan kustom saya:Petunjuk bahwa ini berfungsi dengan benar adalah Anda dapat Ctrl / Apple + klik pada
R.styleable.MyTextViewStyleable_customFont
untuk langsung dibawa ke definisi attrs.xml Anda.Butuh beberapa saat untuk menemukan perbedaan kritis antara kode saya dan contoh lainnya, karena atribut khusus berfungsi dengan baik ketika diteruskan langsung melalui tata letak XML (alih-alih melalui gaya).
sumber