ใช่. คำแนะนำสั้น ๆ :
1. สร้างแอตทริบิวต์ XML
สร้างไฟล์ XML ใหม่ภายใน/res/values/attrs.xml
โดยมีแอตทริบิวต์และประเภท
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<declare-styleable name="MyCustomElement">
<attr name="distanceExample" format="dimension"/>
</declare-styleable>
</resources>
โดยทั่วไปคุณต้องตั้งค่าหนึ่ง<declare-styleable />
สำหรับมุมมองของคุณที่มีแอตทริบิวต์ที่กำหนดเองทั้งหมดของคุณ (ที่นี่เพียงหนึ่งรายการ) ฉันไม่พบรายการประเภทที่เป็นไปได้ทั้งหมดดังนั้นคุณต้องดูแหล่งที่มาสำหรับสิ่งที่ฉันเดา ประเภทที่ผมรู้ว่ามีการอ้างอิง (กับทรัพยากรอื่น) สีบูลมิติลอยจำนวนเต็มและสตริง พวกเขาค่อนข้างอธิบายตัวเอง
2. ใช้แอตทริบิวต์ในเค้าโครงของคุณ
ซึ่งได้ผลเช่นเดียวกับที่คุณทำข้างต้นโดยมีข้อยกเว้นประการหนึ่ง แอตทริบิวต์ที่กำหนดเองของคุณต้องการเป็นเนมสเปซ XML ของตัวเอง
<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"
/>
ตรงไปตรงมาสวย
3. ใช้ประโยชน์จากค่าที่คุณได้รับ
แก้ไขตัวสร้างของมุมมองแบบกำหนดเองของคุณเพื่อแยกวิเคราะห์ค่า
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
เป็นตัวแปรสมาชิกส่วนตัวในตัวอย่างนี้ TypedArray
มีสิ่งอื่น ๆ อีกมากมายในการแยกวิเคราะห์ค่าประเภทอื่น ๆ
และนั่นแหล่ะ ใช้ค่าที่แยกวิเคราะห์ในของคุณView
เพื่อแก้ไขเช่นใช้onDraw()
เพื่อเปลี่ยนรูปลักษณ์ตามนั้น