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:

  • Android benutzerdefinierte Pinsel Muster / Bild
  • Schlechte Leistung von Android Canvas.drawBitmap - Umschalten auf OpenGL?
  • Android Device Monitor File Explorer funktioniert nicht mit Emulator mit API 24+
  • Einfache Parse JSON von URL auf Android und Display in Listenansicht
  • Verwenden Sie @Ignore in AndroidTestCase
  • Cordova für Android: Beim Hören von Android-Zielen ist ein Fehler aufgetreten
  • 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!

  • So ändern Sie das MenuItem-Symbol in ActionBar programmgesteuert
  • Button mit Hintergrund als AnimationDrawable in Android
  • Wie man android listview wie android google chrome tab erstellen kann
  • Wie kann man das Android-Studio ändern oder hinzufügen?
  • Wie kann man die Bildschaltfläche für den verschiedenen Zustand einstellen?
  • Sweep gradient: Was ist es und seine Beispiele
  • 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.