Iya. Panduan singkat:
1. Buat atribut XML
Buat file XML baru di dalamnya /res/values/attrs.xml
, dengan atribut dan tipenya
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<declare-styleable name="MyCustomElement">
<attr name="distanceExample" format="dimension"/>
</declare-styleable>
</resources>
Pada dasarnya Anda harus menyiapkan satu <declare-styleable />
untuk tampilan Anda yang berisi semua atribut khusus Anda (di sini hanya satu). Saya tidak pernah menemukan daftar lengkap kemungkinan jenis, jadi Anda perlu melihat sumbernya, saya kira. Jenis yang saya tahu adalah referensi (ke sumber daya lain), warna, boolean, dimensi, float, integer, dan string . Mereka cukup jelas
2. Gunakan atribut dalam tata letak Anda
Itu bekerja dengan cara yang sama seperti yang Anda lakukan di atas, dengan satu pengecualian. Atribut khusus Anda membutuhkan namespace XML-nya sendiri.
<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"
/>
Cukup lurus ke depan.
3. Manfaatkan nilai-nilai yang Anda lewati
Ubah konstruktor tampilan kustom Anda untuk mengurai nilai.
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
adalah variabel anggota privat dalam contoh ini. TypedArray
punya banyak hal lain untuk mengurai jenis nilai lainnya.
Dan itu dia. Gunakan nilai parsing Anda View
untuk memodifikasinya, misalnya menggunakannya onDraw()
untuk mengubah tampilan yang sesuai.