Eine gut durchdachte benutzerdefinierte Ansicht ist wie jede andere gut gestaltete Klasse. Es enthält eine bestimmte Gruppe von Funktionen mit einer einfachen Benutzeroberfläche, effiziente Nutzung von CPU und Arbeitsspeicher usw. In ist nicht nur ein erfüllt, muss eine benutzerdefinierte Ansicht folgende Anforderungen erfüllen:
- Es muss den Android-Standards entsprechen.
- Geben Sie benutzerdefinierte, anpassbare Attribute an, die mit Android-XML-Layouts funktionieren.
- Bedienungshilfen-Ereignisse senden.
- Sie muss mit mehreren Android-Plattformen kompatibel sein.
Das Android-Framework bietet eine Reihe von Basisklassen und XML-Tags, mit denen Sie eine Ansicht erstellen können, erfüllt alle diese Anforderungen. In dieser Lektion erfahren Sie, wie Sie mithilfe des Android-Frameworks Funktionalität einer Ansicht .
Weitere Komponenten einer benutzerdefinierten Ansicht.
Abgeleitete Klassen einer Ansicht erstellen
Alle im Android-Framework definierten Ansichtsklassen
    View Ihr
    kann die benutzerdefinierte Ansicht auch
    erweitern Sie View direkt oder Sie können
    um Zeit zu sparen, indem Sie eine der
    bestehende Ansicht
    abgeleiteten Klassen wie Button.
Damit Android Studio mit Ihrer Ansicht interagieren kann, müssen Sie mindestens einen Konstruktor bereitstellen, der eine
Context und ein AttributeSet-Objekt als Parameter.
Mit diesem Konstruktor kann der Layout-Editor eine Instanz Ihrer Ansicht erstellen und bearbeiten.
Kotlin
class PieChart(context: Context, attrs: AttributeSet) : View(context, attrs)
Java
class PieChart extends View { public PieChart(Context context, AttributeSet attrs) { super(context, attrs); } }
Benutzerdefinierte Attribute definieren
Wenn du deiner Benutzeroberfläche eine integrierte View hinzufügen möchtest, gib sie in einem XML-Element an und
seine
Darstellung und Verhalten mit Elementattributen. Sie können auch benutzerdefinierte
Ansichten mithilfe von XML abrufen. Bis
So aktivieren Sie dieses Verhalten in Ihrer benutzerdefinierten Ansicht:
- Definieren Sie in einem <declare-styleable>-Ressourcenelement benutzerdefinierte Attribute für Ihre Ansicht.
- Geben Sie Werte für die Attribute in Ihrem XML-Layout an.
- Attributwerte zur Laufzeit abrufen
- Wenden Sie die abgerufenen Attributwerte auf Ihre Ansicht an.
In diesem Abschnitt wird erläutert, wie Sie benutzerdefinierte Attribute definieren und ihre Werte angeben. Im nächsten Abschnitt geht es um Abrufen und Anwenden der Werte zur Laufzeit.
Fügen Sie Ihrem Projekt <declare-styleable>
    -Ressourcen hinzu, um benutzerdefinierte Attribute zu definieren. Es ist üblich, diese Ressourcen in einem
    res/values/attrs.xml-Datei. Hier finden Sie
    Beispiel für eine attrs.xml-Datei:
<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>
Mit diesem Code werden die beiden benutzerdefinierten Attribute showText und labelPosition deklariert.
    die zu einem stilsicheren
    Entität mit dem Namen PieChart. Der Name des formatierbaren Elements lautet üblicherweise der gleiche
    
    Name der Klasse
    zum Definieren der benutzerdefinierten Ansicht. Auch wenn es nicht notwendig ist,
diese Konvention zu befolgen,
    Viele beliebte Codes
    -Editoren benötigen diese Namenskonvention, um Anweisungen zu vervollständigen.
Sobald Sie benutzerdefinierte Attribute definiert haben, können Sie sie wie integrierte
    Attribute. Die einzige
    der Unterschied besteht darin, dass Ihre benutzerdefinierten Attribute zu einem anderen Namespace gehören. Anstelle des Zugehörigkeitsgefühls
    zum Namespace http://schemas.android.com/apk/res/android gehören, gehören sie zu http://schemas.android.com/apk/res/[your package name]. So verwenden Sie zum Beispiel die
    Attribute definiert für
    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>
Damit der lange Namespace-URI nicht wiederholt werden muss, wird im Beispiel ein
            xmlns-Anweisung. Durch diese Anweisung wird der Alias custom
            Namespace http://schemas.android.com/apk/res/com.example.customviews
            Sie können einen beliebigen Alias für den Namespace auswählen.
Beachten Sie den Namen des XML-Tags, mit dem die benutzerdefinierte Ansicht zum Layout hinzugefügt wird. Dabei handelt es sich um die
            den qualifizierten Namen des
            benutzerdefinierte Ansichtsklasse. Wenn es sich bei Ihrer View-Klasse um eine innere Klasse handelt, qualifizieren Sie sie weiter.
            durch den Namen der äußeren Klasse der Ansicht.
            Zum Beispiel
            Die Klasse PieChart hat eine innere Klasse namens PieView. So verwenden Sie die
            aus dieser Klasse erstellt haben,
            verwenden Sie das Tag com.example.customviews.charting.PieChart$PieView.
Benutzerdefinierte Attribute anwenden
Wenn eine Ansicht aus einem XML-Layout erstellt wird, werden alle Attribute im XML-Tag gelesen.
            aus der Ressource
            gebündelt und als Ansichtskonstruktor übergeben werden.
            AttributeSet
            Obwohl es
            Werte direkt aus AttributeSet zu lesen,
            hat einige Nachteile:
- Ressourcenverweise innerhalb von Attributwerten werden nicht aufgelöst.
- Stile werden nicht angewendet.
Übergeben Sie stattdessen AttributeSet an
            obtainStyledAttributes().
            Bei dieser Methode wird ein
            TypedArray
            Array von
            Werte, die
            bereits dereferenziert und formatiert.
Der Android-Ressourcen-Compiler erledigt eine Menge Arbeit für Sie, damit
            obtainStyledAttributes()
            einfacher zu machen. Pro <declare-styleable>
            Ressource im Verzeichnis res/ definiert, definiert die generierte R.java sowohl ein Array von Attributen
            IDs und eine Reihe von
            Konstanten, die den Index für jedes Attribut im Array definieren. Sie verwenden die vordefinierten
            zu lesende Konstanten
            Attribute aus TypedArray Und so gehts
            Klasse PieChart
            liest seine Attribute:
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(); } }
Beachten Sie, dass TypedArray-Objekte
          sind eine freigegebene Ressource
            und müssen nach der Verwendung recycelt werden.
Attribute und Ereignisse hinzufügen
Mit Attributen können Sie Verhalten und Darstellung von Ansichten auf effektive Weise steuern.
            sie können nur gelesen werden
            Wenn die Ansicht initialisiert wird. Für ein dynamisches Verhalten geben Sie einen Eigenschafts-Getter und
            Setter-Paar für jede
            benutzerdefiniertes Attribut. Das folgende Snippet zeigt, wie PieChart eine Property freigibt
            mit dem Namen 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(); }
Beachten Sie, dass setShowText invalidate() aufruft.
            und requestLayout(). Diese Anrufe sind entscheidend,
            damit die Ansicht
zuverlässig funktioniert. Du brauchst
            , um die Ansicht nach jeder Änderung an ihren Eigenschaften, die möglicherweise ihre
            Erscheinungsbild, sodass das
            das System erkennt, dass es neu gezeichnet werden muss. Ebenso müssen Sie ein neues Layout anfordern,
            dass sich eine Eigenschaft so ändert,
            die sich auf die Größe oder Form der Ansicht auswirken könnten. Wenn Sie diese Methodenaufrufe vergessen,
            schwer zu finden
            Bugs.
Benutzerdefinierte Ansichten müssen außerdem Ereignis-Listener unterstützen, damit wichtige Ereignisse kommunizieren können. Für
            Instanz, PieChart
            ein benutzerdefiniertes Ereignis namens OnCurrentItemChanged verfügbar macht, um Listener zu benachrichtigen,
            hat die nutzende Person die
            Kreisdiagramm, um sich auf ein neues Kreissegment zu konzentrieren.
Man vergisst leicht, Eigenschaften und Ereignisse sichtbar zu machen, insbesondere wenn Sie der einzige Nutzer sind der benutzerdefinierten Ansicht. Wenn Sie sich die Zeit nehmen, die Oberfläche Ihrer Ansicht sorgfältig zu definieren, reduziert sich der Wartungsaufwand. Kosten. Es empfiehlt sich, stets alle Eigenschaften sichtbar zu machen, Aussehen oder Verhalten von Ihrer benutzerdefinierten Ansicht.
Barrierefreies Design
Ihre benutzerdefinierte Ansicht muss eine große Bandbreite von Nutzern unterstützen. Dazu gehören Nutzer mit Beeinträchtigungen, die und daran hindern, einen Touchscreen zu sehen oder zu verwenden. Um Nutzende mit Beeinträchtigungen zu unterstützen, Gehen Sie so vor:
- Beschriften Sie Ihre Eingabefelder mithilfe der android:contentDescription.
- Bedienungshilfen-Ereignisse durch Aufrufen von sendAccessibilityEvent()senden wenn es angebracht ist.
- Sie können alternative Controller wie ein Steuerkreuz oder einen Trackball unterstützen.
Weitere Informationen zum Erstellen barrierefreier Ansichten finden Sie unter <ph type="x-smartling-placeholder"></ph> Apps barrierefrei gestalten
 
  