2010-12-10 10 views
16

Oto moja historia:Jak utworzyć atrybut AttributeSet z pliku style.xml?

mam niestandardową ViewGroup że chcę stworzyć z kodu za pomocą predefiniowany styl, moje podejście do tej pory tworzenia obiektu AttributeSet z elementu style.xml, jak tak (uwaga, uwaga kodu copy-paste naprzód):

XmlPullParser parser = getResources().getXml(R.style.my_stylez); 
    AttributeSet attributes = Xml.asAttributeSet(parser); 

Ale kiedy robi więc trochę szalony błąd: ”..android.content.res.Resources $ NotFoundException: zasobami ID # 0x7f090002 typ # 0x12 nie jest ważny "

Wiem, że prawdopodobnie brakuje tu czegoś bardzo oczywistego (lub I?) I byłbym wdzięczny, gdyby któryś z was wskazał mi właściwy kierunek.

Dzięki

+0

Czy mimo wszystko sprawdziłaś się? –

+0

Jakieś rozwiązanie po 3,5 roku? – Supuhstar

Odpowiedz

0

wygląda jak XML (R.style.my_stylez) nie istnieje lub plik R jest przestarzała.

0

Za każdym razem, gdy tworzysz nowe dodatki do katalogu res, dobrym pomysłem jest wyczyszczenie i zbudowanie projektu. Ale odkąd ADT 15 nie zawsze działa dobrze. Czasem trzeba iść o krok dalej i usunąć katalog bin, a także katalog genów.

Po odtworzeniu tych dwóch katalogów spróbuj ponownie uruchomić czyszczenie.

0

Wydaje się całkiem jasne, patrząc na to, że nie jest to możliwe. Przepraszam. Naprawdę chciałbym, żeby to było możliwe ...

0

Metoda getXml będzie czytać z res/xml, a nie z res/values, myślę, że chodzi o to, że używasz jednej z innych metod uzyskiwania danych, takich jak

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomTheme); 

a następnie chwyć wartości z TypedArray:

thingColor = a.getColor(R.styleale.myCustomColor, res.getColor(R.color.myDefaultColor)); 

działa to dla styleables jednak mój problem jest coraz attrs AttributeSet z XML w pierwszej kolejności użyć jako nadpisania i pozwalając ludziom aby określić, który plik XML chce w czasie wykonywania, nadmuchać int o AttributeSet i przekaż go.

wyślę z powrotem, gdy mam odpowiedź na drugą część, ale próbki kod powinien rozwiązać

+0

Szukasz Xml.asAttributeSet (context.getResources(). GetXml (R.xml.my_xml_file)). Sprawdź niektóre z losowanych testów CTS w AOSP na przykład. – alanv

5

Trzeba zacząć z identyfikatorem zasobu do pliku XML, najlepiej w res/xml. Następnie można uzyskać AttributeSet najpierw tworząc XmlPullParser:

Resources res = context.getResources(); 
XmlPullParser parser = res.getXml(R.xml.some_xml_file); 

// Seek to the first tag. 
int type = 0; 
while (type != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) { 
    type = parser.next(); 
} 

// Wrap as an attribute set. 
AttributeSet attrs = Xml.asAttributeSet(parser); 

Można znaleźć przykłady to w rozciągliwych testów CTS w AOSP.

+0

Dzięki za odpowiedź! Miło jest zobaczyć coś, co kiedyś było niemożliwe, otrzymać rozwiązanie. : 3 – Supuhstar

+0

Oprócz poprawnego skonfigurowania pliku xml: https://stackoverflow.com/questions/12508260/how-to-properly-write-xml-for-attributeset – Tobliug

Powiązane problemy