2009-09-21 11 views
15

W ApiDemos, jest przykładem widok nazywany Gallery1 który deklaruje niestandardowy styl w attrs.xml, jako takich:Android niestandardowe style widżetów: jak umieścić je w przestrzeni nazw?

<declare-styleable name="Gallery1"> 
    <attr name="android:galleryItemBackground" /> 
</declare-styleable> 

teraz chcę zrobić to samo dla moich widżetów, ale przy użyciu innego przestrzeń nazw. Jednak, gdy tylko zamieniam android: przestrzeń nazw na coś innego, pojawia się ten błąd:

ERROR: In Gallery1, unable to find attribute myns:galleryItemBackground

Nie można znaleźć atrybutu? Dlaczego szuka się atrybutu, który mam zadeklarować? Czy celem tego pliku nie jest możliwość nazwania własnych niestandardowych atrybutów?

Warto zauważyć, że działa, jeśli nie dostarczono niestandardowej przestrzeni nazw, a jedynie nazwę atrybutu.

Odpowiedz

1

Znalazłem artykuł this pomocny w podobnej sytuacji.

"Odwoływanie się do naszych nowych atrybutów jest procesem dwuetapowym: Najpierw zadeklarowaliśmy nową przestrzeń nazw, a następnie określiliśmy wartości naszych nowych atrybutów w użyciu XML."

+0

Przeczytałem ten artykuł, ale jest przestarzały i zły (po prostu nie działa w ten sposób, przynajmniej już nie). – Matthias

+0

Artykuł działa poprawnie na Androidzie 1.6 [testowany]. Ale mam błędne pytanie. Nie możesz określić przestrzeni nazw podczas deklarowania stylu, jest już w obszarze nazw aplikacji. Podczas gdy Ty lub ktoś inny potrzebuje korzystać z attrów w układach XML układu, muszą go użyć w przestrzeni nazw aplikacji. Ponieważ używamy androida określonego attrs z Androidem: attr – bhatt4982

+0

Myślę, że problem może być związany ze mną, odwołując się do tych stylów z innego projektu. Oznacza to, że deklaruję plik attrs.xml w projekcie A, tworzę z niego JAR i próbuję uzyskać do niego dostęp w innym projekcie B. Zawsze otrzymuję "nie znaleziono identyfikatora zasobu dla atrybutu X". Działa, gdy nie używa się atrybutów w stylu, ale zwykłych atrybutów. – Matthias

20

miałem podobny problem wynikający w komunikacie o błędzie Nie Resource Identifier znalezionych dla atrybutu w pakiecie

Rozwiązanie dla mnie było deklarować nazw kiedy użyć atrybutu niestandardowego.

W pliku xml gdzie użyć niestandardowego atrybutu określić:

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

...

<gallery.widget.package.Gallery1 


myns:myCustomAttr="xxx" 
/> 
+1

Moja walka o ostatnie 2 godziny dobiegła końca. – Signcodeindie

+0

hej, skąd mogę wiedzieć, który z nich jest moim obszarem nazw? mam na myśli twoje xmlns: myns i co moje? –

1

utworzyć plik xml i wkleić poniżej kod i umieścić w li-> Wartości folderu

<declare-styleable name="Gallery1"> 
    <attr name="android:galleryItemBackground" /> 
</declare-styleable> 

i skopiuj poniższy kod

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

i ustawić w ur widget tle to znaczy imageView.setBackgroundResource(back);

6

W przypadku gdy ktoś jest nadal zainteresowany, miałem ten sam problem i rozwiązać go przez dodanie atrybutu „format” (wydaje się, że nie ma „ciąg "domyślnie):

<attr name="android:galleryItemBackground" format="integer"/> 
+0

Dzięki, to był dokładnie mój problem. – simonair

+0

& "czysty projekt" :-) – JRun

Powiązane problemy