So erstellen Sie eine einfache benutzerdefinierte Ansicht?
Ich möchte erstellen Sie eine benutzerdefinierte View
auf Android. Ich habe mich bemüht, es so einfach wie möglich und schuf eine fast leere Klasse MyView
und es in meine LinearLayout
aber die Anwendung schlägt fehl, starten Sie mit "Force Close". Wie kann ich eine einfache benutzerdefinierte View
? Nach Erstellen Von Benutzerdefinierten Komponenten die View
ruft die Größe 100x100 wenn ich nicht überschreiben onMeasure()
.
public class MyView extends View {
public MyView(Context context) {
super(context);
}
}
Und ich verwende es in einem LinearLayout
mit:
<view
class="com.example.MyView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.0" />
Was mache ich falsch?
Wenn ich den Konstruktor verwenden, die itemon schlagen und den entsprechenden Aufruf der Superklasse. Dann die "Force Close" ist Weg, aber meine LinearLayout
ist gebrochen, die Komponenten nach MyView
nicht angezeigt.
Hier ist mein main.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.0"
android:background="#f00"
android:text="Hello"
/>
<view
class="com.example.MyView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.0"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.0"
android:background="#00f"
android:text="World"
/>
</LinearLayout>
- Sie können consult ein gutes Beispiel hier: http://www.sgoliver.net/blog/?p=1457
- Ich habe ähnliche Bedürfnisse.. haben Sie was Sie brauchen . .einige code plz
Du musst angemeldet sein, um einen Kommentar abzugeben.
vielleicht könnten Sie einen anderen Konstruktor-Methode wie diese:
dem android-framework wird versuchen, zu bauen das UI mit dem Blick aus dem Konstruktor oben.
LinearLayout
gebrochen ist, wird die Komponente nach nicht angezeigt.onMeasure()
zu. Jetzt funktioniert es Super.Dem Android Developer Guide hat einen Abschnitt namens erstellen von Benutzerdefinierten Komponenten. Leider ist die Diskussion von XML-Attribute umfasst nur die Erklärung der Steuerung im layout-Datei und nicht wirklich die Handhabung der Werte innerhalb der Klasse die Initialisierung. Die Schritte sind wie folgt:
Deklarieren von Attributen in values\attrs.xml
Beachten Sie die Verwendung von einem unqualifizierten Namen, die in der declare-styleable tag. Nicht-standard-android-Attribute wie extraInformation müssen Ihrem Typ deklariert. Tags deklariert, die in der übergeordneten Klasse wird in Unterklassen, ohne dass Sie erneut deklariert.
Erstellen Sie Konstruktoren
Da gibt es zwei Konstruktoren, die ein AttributeSet für die Initialisierung, ist es bequem zu erstellen Sie eine separate Methode für die Initialisierung die Konstruktoren aufrufen.
R. styleable.MyCustomView ist eine automatisch generierte int[] Ressource, wo jedes element ist die ID eines Attributs. Attribute werden generiert für jede Eigenschaft in der XML-indem das Attribut name, um den Namen des Elements. Attribute können dann abgerufen werden, von der TypedArray-Klasse über verschiedene get-Funktionen. Wenn das Attribut nicht definiert in der XML, dann wird null zurückgegeben. Außer natürlich, wenn der Rückgabetyp ist eine primitive, in diesem Fall wird das zweite argument zurückgegeben.
Wenn Sie nicht wollen, um alle von den Attributen ist es möglich, erstellen Sie dieses array manuell.Die ID für standard-android-Attribute enthalten sind, die in android.R.attr, während die Attribute für dieses Projekt sind in R. attr.
Bitte beachten Sie, dass Sie sollten nicht alles, was in android.R.styleable, laut diesem thread, es könnte sich in Zukunft ändern. Es ist noch in der Dokumentation als um alle diese Konstanten, die in dem einen Ort ist sinnvoll.
Verwenden Sie es in ein layout-Dateien, wie layout\main.xml
Die namespace-Deklaration
in der top-level-xml-element.
Verweisen auf die benutzerdefinierte Ansicht mit dem voll qualifizierten Namen.
Wenn Sie wollen ein komplettes Beispiel, Blick auf die android-label view-Beispiel.
LabelView.java
custom_view_1.xml
Diese in einem LinearLayout mit einem namespace-Attribut: