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