Ich weiß, dass es möglich ist, ein benutzerdefiniertes UI-Element zu erstellen (über View oder eine bestimmte UI-Elementerweiterung). Aber ist es möglich, neue Eigenschaften oder Attribute für neu erstellte UI-Elemente zu definieren (ich meine nicht geerbt, aber brandneu, um ein bestimmtes Verhalten zu definieren, das ich mit Standardeigenschaften oder Attributen nicht verarbeiten kann)?
zB Element mein benutzerdefiniertes Element:
<com.tryout.myCustomElement
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Element..."
android:myCustomValue=<someValue>
/>
Ist es also möglich, MyCustomValue zu definieren ?
Vielen Dank
android
custom-controls
Wegpunkt
quelle
quelle
Antworten:
Ja. Kurzanleitung:
1. Erstellen Sie ein Attribut XML
Erstellen Sie eine neue XML-Datei
/res/values/attrs.xml
mit dem Attribut und dem TypGrundsätzlich müssen Sie eine
<declare-styleable />
für Ihre Ansicht einrichten , die alle Ihre benutzerdefinierten Attribute enthält (hier nur eine). Ich habe nie eine vollständige Liste möglicher Typen gefunden, daher müssen Sie sich die Quelle für einen ansehen, denke ich. Ich kenne folgende Typen: Referenz (auf eine andere Ressource), Farbe, Boolescher Wert, Dimension, Float, Ganzzahl und Zeichenfolge . Sie sind ziemlich selbsterklärend2. Verwenden Sie die Attribute in Ihrem Layout
Das funktioniert genauso wie oben, mit einer Ausnahme. Ihr benutzerdefiniertes Attribut benötigt einen eigenen XML-Namespace.
Ziemlich einfach.
3. Verwenden Sie die Werte, die Sie übergeben bekommen
Ändern Sie den Konstruktor Ihrer benutzerdefinierten Ansicht, um die Werte zu analysieren.
distanceExample
ist in diesem Beispiel eine private Mitgliedsvariable.TypedArray
Ich habe viele andere Dinge, um andere Arten von Werten zu analysieren.Und das ist es. Verwenden Sie den analysierten Wert in Ihrem
View
, um ihn zu ändern, z. B. verwenden Sie ihnonDraw()
, um das Aussehen entsprechend zu ändern.quelle
http://schemas.android.com/apk/res-auto
wenn Sie den benutzerdefinierten Namespace deklarierenString initialText = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto", "initialText");
wobei attr das AttributeSet ist, das im Konstruktor übergeben wird, und 'initialText' Ihr benutzerdefinierter Attributname istErstellen Sie in Ihrem Ordner res / values die Datei attr.xml. Dort können Sie Ihre Attribute definieren:
Wenn Sie es dann in Ihrer Layoutdatei verwenden möchten, müssen Sie hinzufügen
und dann können Sie den Wert mit verwenden
customname:myCustomValue=""
quelle
Ja, Sie können. Verwenden Sie einfach
<resource>
Tag.so was:
Link von der offiziellen Website
quelle