ดังที่ Priya Singhal ตอบแล้ว Android Studio ต้องการชื่อแอตทริบิวต์ทั่วไปเพื่อกำหนดไว้ในชื่อสไตล์ของตนเอง พวกเขาไม่สามารถอยู่ที่รากได้อีกต่อไป
อย่างไรก็ตามมีอีกสองสามสิ่งที่ควรทราบ (ซึ่งเป็นสาเหตุที่ฉันเพิ่มคำตอบด้วย):
- สไตล์ทั่วไปไม่จำเป็นต้องตั้งชื่อให้เหมือนกับมุมมอง (ขอบคุณคำตอบนี้สำหรับการชี้ว่า)
- คุณไม่จำเป็นต้องใช้การสืบทอดกับพาเรนต์
ตัวอย่าง
นี่คือสิ่งที่ฉันทำในโครงการเมื่อเร็ว ๆ นี้ที่มีมุมมองที่กำหนดเองสองแบบที่ทั้งสองใช้คุณลักษณะร่วมกัน ตราบใดที่มุมมองที่กำหนดเองยังคงมีชื่อสำหรับแอตทริบิวต์และไม่รวม a format
ฉันยังสามารถเข้าถึงได้ตามปกติจากรหัส
<?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>
ตัวอย่างที่คล่องตัว
ในความเป็นจริงฉันไม่จำเป็นต้องใส่แอตทริบิวต์ในชื่อที่กำหนดเอง ตราบใดที่ฉันกำหนด (ให้พวกเขาformat
) สำหรับมุมมองที่กำหนดเองอย่างน้อยหนึ่งรายการฉันสามารถใช้พวกเขาได้ทุกที่ (ไม่มีformat
) ดังนั้นวิธีนี้จึงใช้งานได้ (และดูสะอาดกว่า):
<?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>
อย่างไรก็ตามสำหรับโครงการขนาดใหญ่สิ่งนี้อาจทำให้เกิดความยุ่งเหยิงและการกำหนดที่ด้านบนในตำแหน่งเดียวอาจจะดีกว่า (ตามที่แนะนำไว้ที่นี่ )
myattr1
เป็นสตริงMyView1
และจำนวนเต็มMyView2
?