Creare un corso di visualizzazione

Prova il metodo Scrivi
Jetpack Compose è il toolkit consigliato per la UI per Android. Scopri come utilizzare i layout in Compose.

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.