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):
- Gaya umum tidak perlu dinamai hal yang sama dengan tampilan. (Berkat jawaban ini untuk menunjukkan hal itu.)
- Anda tidak perlu menggunakan warisan dengan orang tua.
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.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- common attributes to all custom text based views -->
<declare-styleable name="TextAttributes">
<attr name="text" format="string"/>
<attr name="textSize" format="dimension"/>
<attr name="textColor" format="color"/>
<attr name="gravity">
<flag name="top" value="48" />
<flag name="center" value="17" />
<flag name="bottom" value="80" />
</attr>
</declare-styleable>
<!-- custom text views -->
<declare-styleable name="View1">
<attr name="text"/>
<attr name="textSize"/>
<attr name="textColor"/>
<attr name="gravity"/>
</declare-styleable>
<declare-styleable name="View2">
<attr name="text"/>
<attr name="textSize"/>
<attr name="textColor"/>
<attr name="gravity"/>
</declare-styleable>
</resources>
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 (tanpa format
). Jadi ini juga berfungsi (dan terlihat lebih bersih):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="View1">
<attr name="text" format="string"/>
<attr name="textSize" format="dimension"/>
<attr name="textColor" format="color"/>
<attr name="gravity">
<flag name="top" value="48" />
<flag name="center" value="17" />
<flag name="bottom" value="80" />
</attr>
</declare-styleable>
<declare-styleable name="View2">
<attr name="text"/>
<attr name="textSize"/>
<attr name="textColor"/>
<attr name="gravity"/>
</declare-styleable>
</resources>
Namun, untuk proyek besar, ini bisa menjadi berantakan dan mendefinisikan mereka di atas dalam satu lokasi mungkin lebih baik (seperti yang disarankan di sini ).
myattr1
stringMyView1
dan integerMyView2
?