Das Android-Entwicklerhandbuch enthält einen Abschnitt namens Benutzerdefinierte Komponenten erstellen. Leider behandelt die Diskussion von XML-Attributen nur das Deklarieren des Steuerelements in der Layoutdatei und nicht das tatsächliche Behandeln der Werte innerhalb der Klasseninitialisierung. Die Schritte sind wie folgt:
Declare in Werte Attribute \ attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyCustomView">
<attr name="android:text"/>
<attr name="android:textColor"/>
<attr name="extraInformation" format="string" />
</declare-styleable>
</resources>
Hinweis die Verwendung eines nicht qualifizierten Namen in der declare-styleable-Tag. Nicht-Standard-Android-Attribute wie extraInformation müssen ihren Typ deklariert haben. In der Oberklasse deklarierte Tags sind in Unterklassen verfügbar, ohne dass sie neu deklariert werden müssen.
Konstrukteure erstellen
Da es zwei Konstruktoren, die eine AttributeSet zur Initialisierung verwenden, ist es zweckmäßig, eine separate Initialisierungsmethode für die Konstrukteure erstellen aufzurufen.
private void init(AttributeSet attrs){
TypedArray a=getContext().obtainStyledAttributes(attrs,R.styleable.MyCustomView);
//Use a
Log.i("test",a.getString(R.styleable.MyCustomView_android_text));
Log.i("test",""+a.getColor(R.styleable.MyCustomView_android_textColor, Color.BLACK));
Log.i("test",a.getString(R.styleable.MyCustomView_android_extraInformation));
//Don't forget this
a.recycle();
}
R.styleable.MyCustomView ist eine automatisch generierte int [] Ressource in der jedes Element die ID eines Attributs ist. Attribute werden für jede Eigenschaft im XML generiert, indem der Attributname an den Elementnamen angehängt wird. Attribute können dann mit verschiedenen Get-Funktionen aus dem TypedArray abgerufen werden. Wenn das Attribut nicht im XML-Code definiert ist, wird null zurückgegeben. Außer natürlich, wenn der Rückgabetyp ein Primitiv ist, in welchem Fall das zweite Argument zurückgegeben wird.
Wenn Sie nicht alle Attribute abrufen möchten, können Sie dieses Array manuell erstellen. Die ID für Standard-Android-Attribute ist in android.R.attr enthalten, während die Attribute für dieses Projekt in R sind. attr.
int attrsWanted[]=new int[]{android.R.attr.text, R.attr.textColor};
Bitte beachten Sie, dass Sie nichts in android.R.styleable verwenden sollten, wie in diesem Thread in der Zukunft geändert werden kann. Es ist immer noch in der Dokumentation, alle diese Konstanten an einem Ort zu sehen, ist nützlich.
es in einem Layout-Dateien verwenden wie Layout \ main.xml Fügen Sie die Namespace-Deklaration
xmlns: app = "http://schemas.android.com/apk/res/com.mycompany .projectname "
im obersten XML-Element.
<com.mycompany.projectname.MyCustomView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:text="Test text"
android:textColor="#FFFFFF"
app:extraInformation="My extra information";
/>
Referenzieren Sie die benutzerdefinierte Ansicht mit dem vollständig qualifizierten Namen.
Android Labelview Probe
Wenn Sie ein komplettes Beispiel wollen, Blick auf die Android-Label Beispiel zeigen.
LabelView.java
TypedArray a=context.obtainStyledAttributes(attrs, R.styleable.LabelView);
CharSequences=a.getString(R.styleable.LabelView_text);
attrs.xml
<declare-styleable name="LabelView">
<attr name="text"format="string"/>
<attr name="textColor"format="color"/>
<attr name="textSize"format="dimension"/>
</declare-styleable>
custom_view_1.xml
<com.example.android.apis.view.LabelView
android:background="@drawable/blue"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
app:text="Blue"app:textSize="20dp"/>
Dieses in einem Linearlayout mit einem Namespace-Attribut enthalten ist:
xmlns: app = "http: // schemas.android.com/apk/res/com.example.android.apis "
Sie können ein gutes Beispiel hier konsultieren: [http://www.sgoliver.net/blog/?p=1457](http://www.sgoliver.net/blog/?p=1457) –
Ich habe ähnliches braucht .. hast du was du brauchst. . Teilen Sie einen Code plz – Nepster