Đúng. Hướng dẫn ngắn gọn:
1. Tạo một XML thuộc tính
Tạo một tệp XML mới bên trong /res/values/attrs.xml
, với thuộc tính và loại của nó
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<declare-styleable name="MyCustomElement">
<attr name="distanceExample" format="dimension"/>
</declare-styleable>
</resources>
Về cơ bản, bạn phải thiết lập một <declare-styleable />
cho chế độ xem chứa tất cả các thuộc tính tùy chỉnh của bạn (ở đây chỉ là một). Tôi chưa bao giờ tìm thấy danh sách đầy đủ các loại có thể có, vì vậy bạn cần phải xem nguồn để biết tôi đoán. Các loại mà tôi biết là tham chiếu (đến một tài nguyên khác), màu, boolean, thứ nguyên, float, số nguyên và chuỗi . Chúng khá dễ hiểu
2. Sử dụng các thuộc tính trong bố cục của bạn
Điều đó hoạt động giống như cách bạn đã làm ở trên, với một ngoại lệ. Thuộc tính tùy chỉnh của bạn cần có không gian tên XML riêng.
<com.example.yourpackage.MyCustomElement
xmlns:customNS="http://schemas.android.com/apk/res/com.example.yourpackage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Element..."
customNS:distanceExample="12dp"
/>
Khá thẳng về phía trước.
3. Tận dụng các giá trị bạn nhận được
Sửa đổi hàm tạo của chế độ xem tùy chỉnh của bạn để phân tích cú pháp các giá trị.
public MyCustomElement(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyCustomElement, 0, 0);
try {
distanceExample = ta.getDimension(R.styleable.MyCustomElement_distanceExample, 100.0f);
} finally {
ta.recycle();
}
// ...
}
distanceExample
là một biến thành viên riêng trong ví dụ này. TypedArray
có rất nhiều thứ khác để phân tích cú pháp các loại giá trị khác.
Và đó là nó. Sử dụng giá trị được phân tích cú pháp trong của bạn View
để sửa đổi nó, ví dụ: sử dụng nó trong onDraw()
để thay đổi giao diện cho phù hợp.