Android Custom Control Namespace Problem

Ich habe an einem Custom Control für Android gearbeitet und obwohl ich versucht habe zu tun, was hier vorgeschlagen wird , scheint es etwas zu sein, was ich falsch mache.

Hier ist mein Code zu sehen, ob jemand das Problem erkennen kann:

MeinKomponent.java

public MyComponent(Context context, AttributeSet attrs) { super(context); TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.MyComponent); CharSequence myId = arr.getString(R.styleable.MyComponent_identifier); if (myId != null) { this.setIdentifier(myId.toString()); } Integer cds = arr.getInteger(R.styleable.MyComponent_cd_number, 0); if(cds != null) { this.setCds(cds); } arr.recycle(); } 

Attrs.xml

 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyComponent"> <attr name="cd_number" format="integer" /> <attr name="identifier" format="string" /> </declare-styleable> </resources> 

Main.xml

 <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bgl="http://schemas.android.com/apk/res/my.test.package.components" android:id="@+id/table" android:layout_width="match_parent" android:layout_height="match_parent"> ... <my.test.package.MyComponent android:id="@+id/hand" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_span="2" bgl:cd_number="4" bgl:identifier="plr"/> ... </TableLayout> 

Wenn ich das stelle, bekomme ich folgende Fehler:

Fehler: Keine Ressource Bezeichner gefunden für Attribut 'cd_number' im Paket 'my.test.package' Fehler: Keine Ressource Bezeichner gefunden für Attribut 'Identifier' im Paket 'my.test.package'

Wenn ich meinen Namensraum zu etwas wie folgt ändere:

 xmlns:bgl="http://schemas.mywhatever.com/apk/res/my.test.package" 

… die Fehler gehen weg und die Sache läuft, aber myId ist null und cds ist 0 (der Standardwert!) Zurück auf dem MyComponent.java Konstruktor.

Ich würde sagen, es ist ein sehr einfacher Fehler, aber ich kann es nicht merken und da gibt es nicht viel Dokumentation darüber, dass ich mich hier entschieden habe.

Danke im Voraus!

  • Android benutzerdefinierte Layout Attribut "Referenzattribut" -Format?
  • Wie bekomme ich klickbare Hyperlinks in AlertDialog aus einer String-Ressource?
  • Verwenden der Android-Support-Bibliothek 23.2 in build.gradle Abstürze app (XmlPullParserException: XmlPullParserException: ungültiger Zeichnungs-Tag-Vektor)
  • Deaktivieren Sie Änderungen auf der Suchmaschine nach Client
  • Android-Themen: Definieren Sie Farben / Farbverläufe in "baseTheme.xml", verwenden Sie innerhalb von Steuerelementen, überschreiben Sie in "subThemeX.xml"
  • Kann nicht onDismiss () verwenden, wenn benutzerdefinierte Dialoge verwendet werden - Android
  • Holen Sie sich die Ressourcen-ID für die Zeichnungsreferenz, die im Stilattribut verwendet wird
  • Wie mache ich eine benutzerdefinierte Fortschrittsanzeige in Android?
  • 2 Solutions collect form web for “Android Custom Control Namespace Problem”

    OK. Ich habe es gelöst!

    Auf der ursprünglichen Post hatte ich:

     xmlns:bgl="http://schemas.android.com/apk/res/my.test.package 

    … aber in meiner Quelle hatte ich:

     xmlns:bgl="http://schemas.android.com/apk/res/my.test.package.components 

    … weil ich dachte, man sollte den URI auf das Komponentenpaket legen.

    DAS IST FALSCH!

    Auf den xmlns sollte es der Anwendungsname sein, wie auf dem Manifest deklariert ist!

    Als ich den "Komponenten" -Teil der xmlns entfernt habe, hat es den Applikationsnamen im Manifest "abgestimmt" und die Fehler gingen weg und als ich das Ding im Debug lief, konnte ich eigentlich die Werte sehen, die ich an die Parameter im XML übergab.

    Hoffe das hilft jemand anderes! 🙂

    AKTUALISIEREN

    Später hatte ich die Notwendigkeit, die Kontrolle in eine Bibliothek zu bringen und das Problem wieder zu stellen. Es scheint, dass, wenn Sie die Komponente in einer Bibliothek und verwenden Sie es auf einer Client-App müssen Sie die xmlns als unten zu erklären:

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

    Wenn Sie dies tun (und die Bibliothek als Android-Abhängigkeit deklariert haben), wird Eclipse (oder ist es Android?) Die Abhängigkeiten für die entsprechenden Attributbindungen durchsuchen.

    Ich hatte ein ähnliches Problem, stellte sich heraus, dass es einen anderen Konstruktor anrief

    Versuchen Sie es mit dem Konstruktor, der den defStyle Parameter defStyle

     public MyComponent(Context context, AttributeSet attrs, int defStyle) 
    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.