Như Priya Singhal đã trả lời, Android Studio yêu cầu các tên thuộc tính chung phải được xác định trong tên kiểu riêng của chúng. Họ không thể ở gốc nữa.
Tuy nhiên, có một vài điều khác cần lưu ý (đó là lý do tại sao tôi cũng đang thêm một câu trả lời):
- Các kiểu phổ biến không cần được đặt tên giống như một khung nhìn. (Nhờ câu trả lời này đã chỉ ra điều đó.)
- Bạn không cần phải sử dụng thừa kế với cha mẹ.
Thí dụ
Đây là những gì tôi đã làm trong một dự án gần đây có hai chế độ xem tùy chỉnh mà cả hai đều có chung thuộc tính. Miễn là các chế độ xem tùy chỉnh vẫn có tên cho các thuộc tính và không bao gồm a format
, tôi vẫn có thể truy cập chúng như bình thường từ mã.
<?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>
Ví dụ hợp lý
Thực tế, tôi thậm chí không cần đặt các thuộc tính dưới một tên tùy chỉnh. Miễn là tôi xác định chúng (cung cấp cho chúng a format
) cho ít nhất một chế độ xem tùy chỉnh, tôi có thể sử dụng chúng ở bất cứ đâu (không có format
). Vì vậy, điều này cũng hoạt động (và trông sạch hơn):
<?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>
Tuy nhiên, đối với một dự án lớn, điều này có thể trở nên lộn xộn và việc xác định chúng ở đầu trong một vị trí có thể tốt hơn (như được đề xuất ở đây ).
myattr1
chuỗi trongMyView1
và số nguyên trongMyView2
?