Definieren von benutzerdefinierten Attras
Brauche ich zur Umsetzung meiner eigenen Attribute, wie in com.android.R.attr
Fand nichts in der offiziellen Dokumentation so brauche ich Informationen darüber, wie Sie diese definieren attrs, und wie Sie aus meinem code.
InformationsquelleAutor der Frage Alexander Oleynikov | 2010-08-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Derzeit die beste Dokumentation ist die Quelle. Sie können einen Blick an ihm nehmen hier (attrs.xml).
Können Sie definieren Attribute in den top
<resources>
element oder innerhalb eines<declare-styleable>
element. Wenn ich bin eine attr in mehr als einem Ort, den ich steckte es in das root-element. Beachten Sie, dass alle Attribute teilen den gleichen globalen namespace. Das bedeutet, dass selbst wenn Sie ein neues Attribut innerhalb einer<declare-styleable>
- element kann verwendet werden, außerhalb von Ihr, und Sie können nicht erstellen Sie ein anderes Attribut mit dem gleichen Namen von einem anderen Typ.Einer
<attr>
element hat zwei xml-Attributename
undformat
.name
können Sie rufen Sie es etwas, und das ist, wie Sie am Ende die Bezugnahme auf code, z.B.R.attr.my_attribute
. Dieformat
Attribut kann unterschiedliche Werte haben, abhängig von der " Art " - Attribut, die Sie wollen.Können Sie das format festlegen, um mehrere Typen mit
|
z.B.format="reference|color"
.enum
Attribute kann wie folgt definiert werden:flag
Attribute sind ähnlich, außer den Werten, die definiert werden müssen, damit Sie die bit-ored zusammen:Zusätzlich zu den Attributen gibt es die
<declare-styleable>
element. Dies ermöglicht Ihnen das definieren von Attributen einer benutzerdefinierten Ansicht verwenden können. Sie tun dies durch die Angabe einer<attr>
element, wenn es war zuvor nicht angegebenformat
. Wenn Sie möchten, verwenden Sie ein android-attr, zum Beispiel android:gravity, dann kann man das in dername
wie folgt.Ein Beispiel für eine benutzerdefinierte Ansicht
<declare-styleable>
:Beim definieren der benutzerdefinierten Attribute in XML auf Ihre benutzerdefinierte Ansicht, die Sie brauchen, um ein paar Dinge tun. Zuerst müssen Sie deklarieren einen namespace zu finden, die deine Attribute. Sie tun dies auf der root-layout-element. Normalerweise gibt es nur
xmlns:android="http://schemas.android.com/apk/res/android"
. Jetzt müssen Sie auch hinzufügenxmlns:whatever="http://schemas.android.com/apk/res-auto"
.Beispiel:
Schließlich den Zugriff auf benutzerdefinierte attribute, die Sie normalerweise tun, also im Konstruktor der benutzerdefinierten Ansicht wie folgt.
Ende. 🙂
InformationsquelleAutor der Antwort Qberticus
Qberticus s Antwort ist gut, aber ein nützliches detail fehlt. Wenn Sie implementieren diese in einer Bibliothek zu ersetzen:
mit:
Ansonsten ist die Anwendung, die die Bibliothek wird von Laufzeitfehlern.
InformationsquelleAutor der Antwort Neil Miller
Die Antwort oben umfasst alles sehr detailliert, abgesehen von ein paar Sachen.
Erste, wenn es keine Stile, dann die
(Context context, AttributeSet attrs)
Signatur der Methode wird instanziiert werden den Vorzug. In diesem Fall verwenden Sie einfachcontext.obtainStyledAttributes(attrs, R.styleable.MyCustomView)
um die TypedArray-Klasse.Zweitens deckt er nicht, wie man mit plaurals Ressourcen (Menge von Zeichenfolgen). Diese können sich mit der TypedArray-Klasse. Hier ist ein Codeausschnitt aus meinem SeekBarPreference, legt die Zusammenfassung der Vorliebe formatieren Sie dessen Wert entsprechend dem Wert der Einstellung. Wenn die xml für die Voreinstellung legt android:Inhaltsangabe zu einem text-string oder ein string-Ressource der Wert der Voreinstellung formatiert in den string ein (es sollten %d in es, um pick-up die Wert). Wenn android:summary gesetzt ist, um eine plaurals Ressource, dann ist das format das Ergebnis.
notifyChanged()
in der Präferenz deronDialogClosed
Methode.InformationsquelleAutor der Antwort Steve Waring
Den traditionellen Ansatz ist voll von boilerplate-code und ungeschickt Ressource-handling. Deshalb habe ich die Spyglass Rahmen. Um zu demonstrieren, wie es funktioniert, hier ist ein Beispiel zeigt, wie Sie eine benutzerdefinierte Ansicht zeigt, dass ein String Titel.
Schritt 1: Erstellen Sie eine benutzerdefinierte view-Klasse.
Schritt 2: Definieren Sie eine string-Attribut in der
values/attrs.xml
Ressource-Datei:Schritt 3: Anwenden der
@StringHandler
Kommentar zu densetTitle
Methode zu sagen, die Spyglass-framework zur route der Attribut-Wert zu dieser Methode, wenn Sie der Ansicht ist aufgeblasen.Nun, dass Ihre Klasse eine Spyglass-Anmerkung, die Spyglass-framework erkennt, wenn es zur compile-Zeit und generiert automatisch die
CustomView_SpyglassCompanion
Klasse.Schritt 4: Verwenden Sie die generierte Klasse in der benutzerdefinierten Ansicht
init
Methode:Das ist es. Nun, wenn Sie die Klasse instanziieren, die aus XML, den Spyglass-Begleiter interpretiert die Attribute und stellt die erforderlichen Aufruf der Methode. Zum Beispiel, wenn wir Blasen die folgenden layout dann
setTitle
aufgerufen wird"Hello, World!"
als argument.Rahmen beschränkt sich nicht auf string-Ressourcen hat viele verschiedene Anmerkungen für den Umgang mit anderen Ressource-Typen. Es hat auch Anmerkungen für die Definition von default-Werten und für die Weitergabe in der Platzhalter-Werte, wenn Ihre Methoden, die mehrere Parameter haben.
Haben Sie einen Blick auf die Github-repo für weitere Informationen und Beispiele.
InformationsquelleAutor der Antwort Helios