Tampilan kustom yang didesain dengan baik akan serupa dengan class lain yang dirancang dengan baik. Ini mengenkapsulasi serangkaian fungsionalitas dengan antarmuka yang sederhana, menggunakan CPU dan memori secara efisien, dan sebagainya. Di beberapa selain menjadi yang dirancang dengan baik, tampilan kustom harus melakukan hal berikut:
- Sesuai dengan standar Android.
- Berikan atribut kustom yang dapat ditata gayanya dan berfungsi dengan tata letak XML Android.
- Mengirim peristiwa aksesibilitas.
- Kompatibel dengan berbagai platform Android.
Framework Android menyediakan kumpulan class dasar dan tag XML untuk membantu Anda membuat tampilan yang memenuhi semua ini lainnya. Tutorial ini membahas cara menggunakan framework Android untuk membuat inti fungsionalitas tampilan .
Anda dapat menemukan informasi di Komponen tampilan kustom.
Membuat subclass tampilan
Semua class tampilan yang didefinisikan dalam framework Android memperluas
View
. Nama
tampilan kustom juga dapat
memperluas View
secara langsung, atau Anda dapat
menghemat waktu dengan memperpanjang
tampilan yang ada
subclass, seperti Button
.
Agar Android Studio dapat berinteraksi dengan tampilan Anda, setidaknya Anda harus menyediakan konstruktor yang membutuhkan
Context
dan objek AttributeSet
sebagai parameter.
Konstruktor ini memungkinkan layout editor untuk membuat dan mengedit instance tampilan Anda.
Kotlin
class PieChart(context: Context, attrs: AttributeSet) : View(context, attrs)
Java
class PieChart extends View { public PieChart(Context context, AttributeSet attrs) { super(context, attrs); } }
Menentukan atribut khusus
Untuk menambahkan View
bawaan ke antarmuka pengguna Anda, tentukan dalam elemen XML dan
mengontrolnya
penampilan dan perilaku dengan atribut elemen. Anda juga dapat menambahkan dan menata gaya
menggunakan XML. Kepada
mengaktifkan perilaku ini dalam tampilan kustom Anda, lakukan hal berikut:
- Tentukan atribut khusus untuk tampilan Anda dalam elemen resource
<declare-styleable>
. - Tetapkan nilai untuk atribut dalam tata letak XML Anda.
- Mengambil nilai atribut saat runtime.
- Terapkan nilai atribut yang diambil ke tampilan Anda.
Bagian ini membahas cara menentukan atribut kustom dan menentukan nilainya. Bagian selanjutnya membahas mengambil dan menerapkan nilai tersebut pada runtime.
Untuk menentukan atribut kustom, tambahkan resource <declare-styleable>
ke project Anda. Biasanya, sumber daya ini
ditempatkan dalam sebuah
File res/values/attrs.xml
. Berikut
contoh file attrs.xml
:
<resources> <declare-styleable name="PieChart"> <attr name="showText" format="boolean" /> <attr name="labelPosition" format="enum"> <enum name="left" value="0"/> <enum name="right" value="1"/> </attr> </declare-styleable> </resources>
Kode ini mendeklarasikan dua atribut khusus, showText
dan labelPosition
,
yang termasuk dalam gaya visual
entitas bernama PieChart
. Nama entity yang dapat ditata gayanya, menurut konvensi, sama
sebagai
nama class
yang mendefinisikan tampilan kustom. Meskipun tidak perlu
mengikuti konvensi ini,
banyak kode populer
editor bergantung pada konvensi penamaan ini untuk memberikan pelengkapan pernyataan.
Setelah mendefinisikan atribut khusus, Anda bisa menggunakannya dalam file XML tata letak seperti
. Satu-satunya
perbedaannya adalah atribut khusus Anda
milik ruang nama yang berbeda. Alih-alih menjadi milik
ke namespace http://schemas.android.com/apk/res/android
, file tersebut milik http://schemas.android.com/apk/res/[your package name]
. Misalnya, berikut adalah cara menggunakan
atribut yang ditetapkan untuk
PieChart
:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto"> <com.example.customviews.charting.PieChart custom:showText="true" custom:labelPosition="left" /> </LinearLayout>
Agar tidak perlu mengulang URI namespace yang panjang, contoh ini menggunakan atribut
Perintah xmlns
. Perintah ini menetapkan custom
alias ke
namespace http://schemas.android.com/apk/res/com.example.customviews
.
Anda dapat memilih alias yang diinginkan untuk namespace Anda.
Perhatikan nama tag XML yang menambahkan tampilan kustom ke tata letak. AI generatif adalah
nama yang memenuhi syarat dari
class tampilan kustom. Jika class tampilan Anda adalah inner class, kualifikasikan lebih lanjut
dengan nama class luar tampilan.
Misalnya,
Class PieChart
memiliki class dalam yang disebut PieView
. Untuk menggunakan
atribut khusus dari class ini, Anda
gunakan tag com.example.customviews.charting.PieChart$PieView
.
Menerapkan atribut khusus
Jika tampilan dibuat dari tata letak XML, semua atribut dalam tag XML akan dibaca
dari referensi
memaketkan dan diteruskan ke konstruktor tampilan sebagai
AttributeSet
.
Meskipun
dapat membaca nilai dari AttributeSet
secara langsung, sehingga
memiliki beberapa kekurangan:
- Referensi resource dalam nilai atribut tidak di-resolve.
- Gaya tidak diterapkan.
Sebagai gantinya, teruskan AttributeSet
ke
obtainStyledAttributes()
.
Metode ini meneruskan kembali sebuah
TypedArray
array
nilai-nilai yang
tidak direferensikan dan telah ditata.
Compiler resource Android melakukan banyak hal untuk Anda guna melakukan panggilan
obtainStyledAttributes()
semuanya. Untuk setiap <declare-styleable>
resource di direktori res/
, R.java
yang dihasilkan akan menentukan array atribut
ID dan serangkaian
yang menentukan indeks untuk setiap atribut dalam array. Anda menggunakan model
konstanta untuk membaca
atribut dari TypedArray
. Berikut caranya
class PieChart
membaca atributnya:
Kotlin
init { context.theme.obtainStyledAttributes( attrs, R.styleable.PieChart, 0, 0).apply { try { mShowText = getBoolean(R.styleable.PieChart_showText, false) textPos = getInteger(R.styleable.PieChart_labelPosition, 0) } finally { recycle() } } }
Java
public PieChart(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.getTheme().obtainStyledAttributes( attrs, R.styleable.PieChart, 0, 0); try { mShowText = a.getBoolean(R.styleable.PieChart_showText, false); textPos = a.getInteger(R.styleable.PieChart_labelPosition, 0); } finally { a.recycle(); } }
Perhatikan bahwa objek TypedArray
adalah referensi bersama
dan harus didaur ulang setelah digunakan.
Menambahkan properti dan peristiwa
Atribut adalah cara yang ampuh untuk mengontrol perilaku dan tampilan tampilan, tetapi
hanya dapat dibaca
saat tampilan diinisialisasi. Untuk memberikan perilaku dinamis, ekspos pengambil properti dan
pasangan penyetel untuk setiap
atribut khusus. Cuplikan berikut menunjukkan cara PieChart
mengekspos properti
disebut showText
:
Kotlin
fun isShowText(): Boolean { return mShowText } fun setShowText(showText: Boolean) { mShowText = showText invalidate() requestLayout() }
Java
public boolean isShowText() { return mShowText; } public void setShowText(boolean showText) { mShowText = showText; invalidate(); requestLayout(); }
Perhatikan bahwa setShowText
memanggil invalidate()
dan requestLayout()
. Panggilan ini sangat penting
untuk memastikan perilaku tampilan dapat diandalkan. Anda perlu
untuk membatalkan tampilan setelah ada perubahan pada propertinya yang mungkin mengubah
tampilan, sehingga
mengetahui bahwa sistem tersebut
perlu digambar ulang. Demikian pula, Anda perlu meminta tata letak baru jika
suatu properti berubah dengan cara
yang mungkin mempengaruhi
ukuran atau bentuk tampilan. Melupakan panggilan metode ini dapat menyebabkan
sulit ditemukan
serangga kecil.
Tampilan kustom juga harus mendukung pemroses peristiwa untuk mengomunikasikan peristiwa penting. Sebagai
PieChart
,
mengekspos peristiwa khusus bernama OnCurrentItemChanged
untuk memberi tahu pemroses bahwa
pengguna memutar
bagan pai yang berfokus pada irisan pai baru.
Properti dan peristiwa sering lupa ditampilkan, terutama jika Anda satu-satunya pengguna tampilan kustom. Meluangkan waktu untuk menentukan antarmuka tampilan Anda dengan cermat akan mengurangi pemeliharaan di masa mendatang untuk biaya operasional. Aturan yang baik untuk diikuti adalah selalu mengekspos properti apa pun yang memengaruhi elemen penampilan atau perilaku tampilan kustom Anda.
Desain untuk aksesibilitas
Tampilan kustom harus mendukung berbagai pengguna. Ini termasuk pengguna dengan disabilitas yang mencegah mereka melihat atau menggunakan layar sentuh. Untuk mendukung pengguna penyandang disabilitas, lakukan hal berikut:
- Melabeli kolom input menggunakan
android:contentDescription
. - Mengirim peristiwa aksesibilitas dengan memanggil
sendAccessibilityEvent()
jika diperlukan. - Mendukung pengontrol alternatif, seperti D-pad atau trackball.
Untuk informasi selengkapnya tentang membuat tampilan yang dapat diakses, lihat Membuat aplikasi lebih mudah diakses.