17 Stimmen

Android benutzerdefinierte Widget-Stile: Wie fügt man sie in einen Namespace ein?

In den ApiDemos gibt es ein Ansichtsbeispiel namens Gallery1, das einen benutzerdefinierten Stil in attrs.xml deklariert, wie folgt:

Jetzt möchte ich das Gleiche für meine Widgets tun, aber mit einem anderen Namensraum. Sobald ich jedoch den android: Namensraum durch etwas anderes ersetze, erhalte ich diesen Fehler:

FEHLER: In Gallery1 kann das Attribut myns:galleryItemBackground nicht gefunden werden

Kann das Attribut nicht finden? Warum sucht es nach einem Attribut, das ich gerade deklarieren möchte? Sollte es nicht gerade darum gehen, Ihre eigenen benutzerdefinierten Attribute zu benennen?

Interessanterweise funktioniert es, wenn Sie keinen benutzerdefinierten Namensraum, sondern nur einen Attributnamen angeben.

22voto

thumbmunkeys Punkte 20341

Ich hatte ein ähnliches Problem, das zur Fehlermeldung Kein Ressourcenidentifikator gefunden für das Attribut im Paket führte

Die Lösung für mich war, den Namensraum anzugeben, wenn du das benutzerdefinierte Attribut verwendest.

In deiner XML-Datei, in der du dein benutzerdefiniertes Attribut verwendest, gib an:

xmlns:myns="http://schemas.android.com/apk/res-auto"

...

1 Stimmen

Mein Kampf der letzten 2 Stunden endete hier.

0 Stimmen

Hey wie kann ich wissen, welches mein Namensraum ist? Ich meine deiner ist xmlns:myns und welcher ist meiner?

8voto

Mihai F Punkte 161

Falls jemand noch interessiert ist, hatte ich dasselbe Problem und habe es gelöst, indem ich ein 'format' Attribut hinzugefügt habe (es scheint, dass es nicht 'string' als Standardwert akzeptiert):

0 Stimmen

Vielen Dank, das war genau mein Problem.

0 Stimmen

& 'sauberes Projekt' :-)

1voto

bhatt4982 Punkte 7904

Ich habe diesen Artikel in einer ähnlichen Situation hilfreich gefunden.

"Der Verweis auf unsere neuen Attribute ist tatsächlich ein zweistufiger Prozess. Zuerst haben wir einen neuen Namespace deklariert und dann die Werte unserer neuen Attribute in der XML-Verwendung spezifiziert."

0 Stimmen

Ich habe den Artikel gelesen, aber er ist veraltet und falsch (es funktioniert einfach nicht auf diese Weise, zumindest nicht mehr).

0 Stimmen

Der Artikel funktioniert gut mit Android 1.6 [getestet]. Aber ich habe deine Frage falsch verstanden. Du kannst keinen Namespace spezifizieren, während du styleable deklarierst, es ist bereits in deinem App-Namespace. Wenn du oder jemand anderes die Attribute in Layout-XMLs verwenden müssen, müssen sie es mit deinem App-Namespace verwenden. Da wir Android-spezifische Attribute mit android:attr verwenden.

0 Stimmen

Ich denke, das Problem könnte darin liegen, dass ich diese Styles aus einem anderen Projekt referenziere. Das heißt, ich deklariere attrs.xml im Projekt A, erstelle ein JAR daraus und versuche, sie in einem anderen Projekt B darauf zuzugreifen. Ich erhalte immer "Kein Ressourcenkennung gefunden für Attribut X". Es funktioniert, wenn ich keine Style-Attribute, sondern einfache Attribute verwende.

1voto

ilango j Punkte 5897

Erstellen Sie eine XML-Datei und fügen Sie den folgenden Code ein und legen Sie ihn im res->values-Ordner ab

und dann kopieren Sie den folgenden Code

TypedArray typedArray=this.obtainStyledAttributes(R.styleable.Gallery1);
        int back=typedArray.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);
        typedArray.recycle();

und setzen Sie den Hintergrund in Ihrem Widget, ich meine imageView.setBackgroundResource(back);

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