2010-12-10 16 views
16

Voici mon histoire:Comment créer un AttributeSet à partir d'un fichier style.xml?

Je suis un ViewGroup personnalisé que je veux créer à partir du code en utilisant un style prédéfini, mon approche a été jusqu'à présent la création d'un objet AttributeSet d'un élément style.xml, comme si (avertissement, méfiez-vous du code de copier-coller l'avant):

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

Mais quand faire si je reçois une erreur folle: » ..android.content.res.Resources $ NotFoundException: ressource ID # 0x7f090002 Type # 0x12 est pas valide "

Je sais que je manque probablement quelque chose de très évident ici (ou suis Je?), Et serais reconnaissant si l'un d'entre vous peut me diriger dans la bonne direction.

Merci

+0

L'avez-vous fait fonctionner après tout? –

+0

Toute solution après 3,5 ans? – Supuhstar

Répondre

0

ressemble à votre XML (R.style.my_stylez) n'existe pas, ou votre fichier R est obsolète.

0

Chaque fois que vous apportez de nouveaux ajouts au répertoire res, il est recommandé de nettoyer et de générer le projet. Mais depuis ADT 15 cela ne fonctionne pas toujours bien. Vous devez parfois aller plus loin et supprimer le répertoire bin ainsi que le répertoire gen. Après que l'adt ait reconstitué ces deux répertoires, essayez à nouveau d'exécuter un nettoyage.

0

Il semble assez clair en regardant autour de soi que ce n'est tout simplement pas possible. Pardon. Je souhaite vraiment que ce soit possible ...

0

La méthode getXml lira à partir de res/xml, pas de res/values, je pense que l'idée est que vous utilisez l'une des autres méthodes pour obtenir les données, telles que

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

et puis saisir les valeurs de la TypedArray:

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

Cela fonctionne pour styleables, mais mon problème est d'obtenir les attrs de AttributeSet de XML en premier lieu à utiliser comme overrides, et permettre aux gens pour spécifier le fichier XML souhaité à l'exécution, gonflez-le o un AttributeSet et le transmettre.

Je vais poster quand j'ai une réponse à la deuxième partie, mais les exemples de code devrait résoudre

+0

Vous recherchez Xml.asAttributeSet (context.getResources(). GetXml (R.xml.my_xml_file)). Vérifiez quelques-uns des tests CTS dessinables dans AOSP pour des exemples. – alanv

5

Vous devez commencer avec un identifiant de ressource pour un fichier XML, de préférence dans res/xml. Ensuite, vous pouvez obtenir un AttributeSet en créant d'abord un 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); 

Vous pouvez trouver des exemples dans les essais étirables CTS à PSBA.

+0

Merci d'avoir répondu! C'est agréable de voir une solution qui était impossible auparavant. : 3 – Supuhstar

+0

En plus de configurer correctement le fichier xml: https://stackoverflow.com/questions/12508260/how-to-properly-write-xml-for-attributeset – Tobliug