Saya sedang menulis beberapa tampilan khusus yang berbagi beberapa atribut dengan nama yang sama. Di <declare-styleable>
bagian masing-masing di attrs.xml
saya ingin menggunakan nama yang sama untuk atribut:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView1">
<attr name="myattr1" format="string" />
<attr name="myattr2" format="dimension" />
...
</declare-styleable>
<declare-styleable name="MyView2">
<attr name="myattr1" format="string" />
<attr name="myattr2" format="dimension" />
...
</declare-styleable>
</resources>
Saya mendapatkan pesan kesalahan yang mengatakan itu myattr1
dan myattr2
sudah ditentukan. Saya menemukan bahwa saya harus menghilangkan format
atribut untuk myattr1
dan myattr2
dalam MyView2
, tetapi jika saya melakukannya, saya mendapatkan kesalahan berikut di konsol:
[2010-12-13 23:53:11 - MyProject] ERROR: In <declare-styleable> MyView2, unable to find attribute
Apakah ada cara saya bisa mencapai ini, mungkin semacam namespacing (hanya menebak)?
myattr1
stringMyView1
dan integerMyView2
?ERROR: In <declare-styleable> com_app_view_widget, unable to find attribute customAttr
Untuk semua tampilan yang saya coba nyatakan. Ada ide?<attr name="myattr1" format="string|integer" />
. Bekerja untukku.Saya memposting jawaban ini karena solusi yang diposting di atas tidak berhasil untuk saya di Android Studio. Saya perlu membagikan atribut khusus saya di antara tampilan kustom saya, jadi saya mencoba solusi di atas di Android Studio tetapi tidak berhasil. Jadi saya bereksperimen dan mencari cara untuk melakukannya. Semoga ini bisa membantu seseorang mencari masalah yang sama.
Ini bekerja untuk saya sepenuhnya. Kita perlu membuat Parent menjadi gaya dan kemudian kita perlu mewarisi orang tua yang gaya. Sebagai contoh, seperti yang telah saya lakukan di atas: Nama gaya induk MyView dan mewarisi ini ke gaya lainnya seperti MyView1 dan MyView2.
sumber
MyView2
yang tepat:R.styleable.MyView2_myattr1
, salah:R.styleable.MyView_myattr1
)Saat Priya Singhal menjawab, Android Studio membutuhkan nama atribut umum untuk didefinisikan dalam nama gaya mereka sendiri. Mereka tidak bisa menjadi akarnya lagi.
Namun, ada beberapa hal lain yang perlu diperhatikan (itulah sebabnya saya juga menambahkan jawaban):
Contoh
Inilah yang saya lakukan dalam proyek terbaru yang memiliki dua tampilan kustom yang sama-sama memiliki atribut yang sama. Selama tampilan khusus masih memiliki nama untuk atribut dan tidak termasuk
format
, saya masih dapat mengaksesnya seperti biasa dari kode.Contoh efisien
Bahkan, saya bahkan tidak perlu meletakkan atribut di bawah nama kustom. Selama saya mendefinisikannya (memberi mereka a
format
) untuk setidaknya satu tampilan kustom, saya dapat menggunakannya di mana saja (tanpaformat
). Jadi ini juga berfungsi (dan terlihat lebih bersih):Namun, untuk proyek besar, ini bisa menjadi berantakan dan mendefinisikan mereka di atas dalam satu lokasi mungkin lebih baik (seperti yang disarankan di sini ).
sumber
parent
atribut tetapi belum melihat banyak posting menyarankan penggunaannya.parent
. Saya pikir saya hanya mengatakan itu tidak diperlukan.Terima kasih Lewis saya punya masalah yang sama, dan solusi warisan Anda memberi saya petunjuk untuk melakukannya seperti di bawah ini dan berfungsi dengan baik. Saya baru saja menyatakan atribut umum di atas dan menulis ulang di badan deklarasi gaya lagi tanpa format. Saya harap ini membantu seseorang
sumber
Hanya dalam kasus seseorang masih terjebak dengan masalah ini setelah mencoba solusi yang tersedia. Saya terjebak dengan menambahkan
subtitle
atributstring
format.Solusi saya adalah menghapus format.
sebelum:
<attr name="subtitle" format="string"/>
setelah:
<attr name="subtitle"/>
sumber