MyView (Konteks konteks)
Digunakan ketika instanciating Views secara pemrograman.
MyView (Konteks konteks, attret Atribut)
Digunakan oleh LayoutInflater
untuk menerapkan atribut xml. Jika salah satu dari atribut ini dinamai style
, atribut akan mencari gaya sebelum mencari nilai eksplisit dalam file tata letak xml.
MyView (Konteks konteks, attrs AtributSet, int defStyleAttr)
Misalkan Anda ingin menerapkan gaya default ke semua widget tanpa harus menentukan style
di setiap file tata letak. Sebagai contoh, buat semua kotak centang berwarna merah muda secara default. Anda dapat melakukan ini dengan defStyleAttr dan kerangka kerja akan mencari gaya default di tema Anda.
Catatan yang defStyleAttr
salah disebutkan defStyle
beberapa waktu lalu dan ada beberapa diskusi tentang apakah konstruktor ini benar-benar diperlukan atau tidak. Lihat https://code.google.com/p/android/issues/detail?id=12683
MyView (Konteks konteks, attret AttributeSet, int defStyleAttr, int defStyleRes)
Konstruktor ke-3 berfungsi dengan baik jika Anda memiliki kontrol atas tema dasar aplikasi. Itu bekerja untuk google karena mereka mengirim widget mereka di samping Tema default. Tapi misalkan Anda sedang menulis perpustakaan widget dan Anda ingin mengatur gaya default tanpa pengguna Anda perlu mengubah tema mereka. Anda sekarang dapat melakukan ini defStyleRes
dengan mengaturnya ke nilai default di 2 konstruktor pertama:
public MyView(Context context) {
super(context, null, 0, R.style.MyViewStyle);
init();
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs, 0, R.style.MyViewStyle);
init();
}
Semua seutuhnya
Jika Anda menerapkan pandangan Anda sendiri, hanya 2 konstruktor pertama yang diperlukan dan dapat dipanggil oleh framework.
Jika Anda ingin Tampilan Anda dapat diperluas, Anda dapat menerapkan konstruktor ke-4 untuk anak-anak kelas Anda agar dapat menggunakan gaya global.
Saya tidak melihat kasus penggunaan nyata untuk konstruktor ke-3. Mungkin jalan pintas jika Anda tidak memberikan gaya default untuk widget Anda, tetapi tetap ingin pengguna Anda dapat melakukannya. Seharusnya tidak banyak terjadi.