Đú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();
    }
    // ...
}
distanceExamplelà một biến thành viên riêng trong ví dụ này. TypedArraycó 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.