4 Stimmen

Warum wir Context.obtainStyledAttributes und declare-styleable verwenden müssen, um Attribute eines GUI-Komponenten zu erhalten

Ich bin gerade auf einige Tutorial-Codebeispiele gestoßen, die declare-styleable in XML und Context.obtainStyledAttributes im Java-Code verwenden.

Mein Verständnis ist, es versucht, das Attribut (wie Hintergrundfarbe) eines GUI-Komponente zu erhalten.

Ich frage mich, warum wir diese umständlichen Schritte durchlaufen müssen, um ein einfaches Attribut zu erhalten. Wenn ich jedes Mal die Attribute einer GUI-Komponente abrufen möchte, muss ich eine neue XML-Datei erstellen und das Attribut, das ich abrufen möchte, in die XML-Datei selbst einfügen. Können wir nicht etwas einfacheres haben?

Derzeit ist dies, was ich tun muss, wenn ich das Attribut einer GUI-Komponente erhalten möchte.


http://developer.android.com/resources/tutorials/views/hello-gallery.html

Erstellen Sie eine XML-Datei.

Fügen Sie den folgenden Java-Code hinzu.

TypedArray a = context.obtainStyledAttributes(R.styleable.HelloGallery);
mGalleryItemBackground = a.getResourceId(
        R.styleable.HelloGallery_android_galleryItemBackground, 0);
a.recycle();

Können wir nicht etwas Einfaches haben wie

helloGalleryInstance.getBackground();

Wie in Swing mache ich normalerweise Folgendes, um ein Attribut einer GUI-Komponente zu erhalten. Es macht Spaß und ist einfach. Können wir in Android etwas Ähnliches haben?

instaceOfAComponent.getBackground();

5voto

Micah Hainline Punkte 14229

Eigentlich steckt da noch viel mehr dahinter. Die Technik, Styles zu verwenden und die Attribute zu erhalten, ist eine Möglichkeit, es Verbrauchern des benutzerdefinierten Komponente zu ermöglichen, XML-Attribute zu verwenden, die Sie für die Steuerung definieren. Zum Beispiel könnten Sie eine TitleWithSubtitle Steuerung erstellen, die ein Attribut für die Größe des Untertitels hat. Mit dieser Technik könnten Sie den Wert aus dem Layout-XML abrufen. Sie könnten immer noch eine getSubtitleTextSize() Methode zur Steuerung hinzufügen, aber diese würde einen anderen Zweck erfüllen.

0voto

CommonsWare Punkte 950864

Um den Hintergrund einer View zu erhalten, rufen Sie getBackground() auf.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X