Una visualizzazione personalizzata ben strutturata è come qualsiasi altra classe ben strutturata. Incapsula una un insieme specifico di con un'interfaccia semplice, usa CPU e memoria in modo efficiente e così via. Nella oltre a essere un ben strutturata, una visualizzazione personalizzata deve:
- Conforme agli standard Android.
- Fornisci attributi di stile personalizzati che funzionano con i layout XML di Android.
- Inviare eventi di accessibilità.
- Essere compatibile con più piattaforme Android.
Il framework Android fornisce un insieme di classi base e tag XML per aiutarti a creare una vista soddisfa tutti questi requisiti i tuoi requisiti. Questa lezione illustra come usare il framework Android per creare funzionalità di una vista .
Puoi trovare ulteriori le informazioni in Componenti della visualizzazione personalizzata.
Sottoclasse a vista
Tutte le classi di visualizzazione definite nel framework Android si estendono
View
. Il tuo
la visualizzazione personalizzata può anche
Estendi direttamente View
oppure
risparmiare tempo estendendo uno dei
vista esistente
come Button
.
Per consentire ad Android Studio di interagire con la tua visualizzazione, devi fornire almeno un costruttore che richieda un
Context
e un oggetto AttributeSet
come parametri.
Questo costruttore consente all'editor del layout di creare e modificare un'istanza della tua vista.
Kotlin
class PieChart(context: Context, attrs: AttributeSet) : View(context, attrs)
Java
class PieChart extends View { public PieChart(Context context, AttributeSet attrs) { super(context, attrs); } }
Definisci attributi personalizzati
Per aggiungere un elemento View
integrato alla tua interfaccia utente, specificalo in un elemento XML e
controllarne
aspetto e comportamento degli attributi degli elementi. Puoi anche aggiungere e personalizzare
utilizzando il linguaggio XML. A
Attiva questo comportamento nella tua visualizzazione personalizzata, procedi nel seguente modo:
- Definisci attributi personalizzati per la tua vista in un elemento risorsa
<declare-styleable>
. - Specifica i valori per gli attributi nel tuo layout XML.
- Recupera i valori degli attributi in fase di runtime.
- Applica alla visualizzazione i valori degli attributi recuperati.
Questa sezione illustra come definire gli attributi personalizzati e specificarne i valori. La prossima sezione tratta recuperando e applicando i valori in fase di runtime.
Per definire attributi personalizzati, aggiungi risorse <declare-styleable>
al progetto. È consuetudine mettere queste risorse in un
res/values/attrs.xml
. Ecco
Ecco un esempio di 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>
Questo codice dichiara due attributi personalizzati, showText
e labelPosition
,
che appartengono a un modello
dell'entità denominata PieChart
. Il nome dell'entità stilizzabile è, per convenzione, lo stesso
nome come
nome della classe
che definisce la visualizzazione personalizzata. Sebbene non sia necessario seguire questa convenzione,
molti codici popolari
gli editor dipendono da questa convenzione di denominazione per fornire il completamento delle istruzioni.
Una volta definiti gli attributi personalizzati, puoi utilizzarli nei file XML di layout, proprio come gli attributi integrati
attributi. L'unico
è che gli attributi personalizzati appartengono a uno spazio dei nomi diverso. Invece di appartenenza
allo spazio dei nomi http://schemas.android.com/apk/res/android
, appartengono a http://schemas.android.com/apk/res/[your package name]
. Ad esempio, ecco come utilizzare il parametro
definiti per gli attributi
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>
Per evitare di dover ripetere l'URI dello spazio dei nomi lungo, l'esempio utilizza un
xmlns
. Questa istruzione assegna l'alias custom
a
lo spazio dei nomi http://schemas.android.com/apk/res/com.example.customviews
.
Puoi scegliere qualsiasi alias per il tuo spazio dei nomi.
Osserva il nome del tag XML che aggiunge la visualizzazione personalizzata al layout. È il modello
nome qualificato del
personalizzata. Se il tuo corso di visualizzazione è un corso interno, qualificalo ulteriormente
con il nome della classe esterna della vista.
Ad esempio,
Il corso PieChart
comprende una classe interna chiamata PieView
. Per utilizzare
attributi personalizzati di questa classe,
utilizza il tag com.example.customviews.charting.PieChart$PieView
.
Applicare attributi personalizzati
Quando viene creata una vista da un layout XML, tutti gli attributi nel tag XML vengono letti
dalla risorsa
un bundle e passati al costruttore della vista
AttributeSet
.
Anche se
leggere i valori direttamente da AttributeSet
, in questo modo
presenta alcuni svantaggi:
- I riferimenti alle risorse all'interno dei valori degli attributi non sono stati risolti.
- Gli stili non sono applicati.
Passa invece AttributeSet
a
obtainStyledAttributes()
.
Questo metodo restituisce un
TypedArray
array di
valori che sono
già dereferenziati e definiti.
Il compilatore di risorse Android fa molto lavoro per consentirti di effettuare
obtainStyledAttributes()
è più facile. Per ogni <declare-styleable>
nella directory res/
, il valore R.java
generato definisce sia un array di attributi
e un insieme
costanti che definiscono l'indice per ogni attributo nell'array. Puoi utilizzare lo strumento predefinito
costanti da leggere
gli attributi di TypedArray
. Ecco come:
il corso PieChart
legge i suoi attributi:
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(); } }
Nota che TypedArray
di oggetti
sono una risorsa condivisa
e devono essere riciclati dopo l'uso.
Aggiungi proprietà ed eventi
Gli attributi sono un modo potente per controllare il comportamento e l'aspetto delle visualizzazioni, ma
possono essere letti
quando la vista viene inizializzata. Per fornire un comportamento dinamico, espone un getter di proprietà e
coppia di setter per ogni
personalizzato. Il seguente snippet mostra come PieChart
espone una proprietà
chiamato 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(); }
Nota che setShowText
chiama invalidate()
e requestLayout()
. Queste chiamate sono cruciali
per assicurarti che la visualizzazione si comporti in modo affidabile. Ti servono
per invalidare la vista dopo qualsiasi modifica alle sue proprietà che potrebbe cambiare
aspetto, in modo che
sa che deve essere ridisegnato. Allo stesso modo, devi richiedere un nuovo layout se
una proprietà cambia nel modo
che potrebbero influire sulle dimensioni o sulla forma della vista. Se elimini queste chiamate al metodo,
difficile da trovare
insetti.
Le viste personalizzate devono inoltre supportare i listener di eventi per comunicare eventi importanti. Per
istanza, PieChart
espone un evento personalizzato denominato OnCurrentItemChanged
per informare gli ascoltatori che
l'utente ha ruotato
grafico a torta per concentrarti su una nuova fetta del grafico a torta.
È facile dimenticare di esporre proprietà ed eventi, soprattutto quando sei l'unico utente della visualizzazione personalizzata. Dedicare del tempo a definire attentamente l'interfaccia della visualizzazione riduce la manutenzione futura costi aggiuntivi. Una buona regola da seguire è esporre sempre tutte le proprietà che influiscono sul l'aspetto o il comportamento di la tua visualizzazione personalizzata.
Progettazione ai fini di una migliore accessibilità
La visualizzazione personalizzata deve supportare un'ampia gamma di utenti. Sono inclusi gli utenti con di disabilità che impedire loro di vedere o utilizzare un touchscreen. Per aiutare gli utenti con disabilità, segui questi passaggi:
- Etichetta i campi di immissione utilizzando
android:contentDescription
. - Invia eventi di accessibilità chiamando il numero
sendAccessibilityEvent()
quando opportuno. - Supporta controller alternativi, come un D-pad o la trackball.
Per ulteriori informazioni sulla creazione di viste accessibili, consulta Rendere le app più accessibili.