2011-01-24 11 views
12

Estoy tratando de leer un AttributeSet de un archivo de recursos XML. El código en cuestión es la siguiente:No puedo leer el AttributeSet de mis recursos XML

//This happens inside an Activity 
     Resources r = getResources(); 
     XmlResourceParser parser = r.getXml(R.layout.testcameraoverlay); 
     AttributeSet as = Xml.asAttributeSet(parser); 

     int count = as.getAttributeCount(); //count is 0!!?? 

count == 0, por lo que Android no es la lectura de cualquier atributo en absoluto!

El archivo XML (R.layout.testcameraoverlay):

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:text="@string/app_name" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"> 
</TextView> 

Por qué no puedo leer los atributos?

+0

No he trabajado mucho con esto, pero ¿sabes si comienzas en el elemento raíz? o si el analizador comienza antes del elemento raíz? Me pregunto si llama a getnext si eso lo moverá al elemento raíz o no. –

Respuesta

15

El problema fue una mala interpretación del funcionamiento del analizador sintáctico. Después de la línea:

XmlResourceParser parser = r.getXml(R.layout.testcameraoverlay); 

el analizador se encuentra al principio del documento y aún no ha leído ningún elemento, por lo tanto, no hay attributeset porque los atributos son, por supuesto, siempre en relación con el elemento actual. Así que para arreglar esto tuve que hacer lo siguiente iterando sobre los elementos hasta que llegué a "TextView":

AttributeSet as = null; 
    Resources r = getResources(); 
    XmlResourceParser parser = r.getLayout(R.layout.testcameraoverlay); 

    int state = 0; 
    do { 
     try { 
      state = parser.next(); 
     } catch (XmlPullParserException e1) { 
      e1.printStackTrace(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     }  
     if (state == XmlPullParser.START_TAG) { 
      if (parser.getName().equals("TextView")) { 
       as = Xml.asAttributeSet(parser); 
       break; 
      } 
     } 
    } while(state != XmlPullParser.END_DOCUMENT); 
+2

También te agradezco. –

0

Si entiendo bien, es necesario leer los atributos de la TextView por ejemplo, el texto dentro de la TextView o la identificación y así sucesivamente?

que lo haría de la siguiente manera:

TextView text_res = (TextView) findViewById(R.id.TextView01); 

String text_inTextView; 
String id_fromTextView; 

text_inTextView = text_res.getText(); 
id_fromTextView = String.valueOf(text_res.getId()); 

y así sucesivamente ...

espero que esto es lo que necesita.

+0

No. En este caso, TextView ni siquiera existe, sino que está contenido en un archivo de recursos XML. Quiero leer este archivo de recursos y crear un TextView a partir de él, pero no obtengo ninguno de los atributos. – Roland

Cuestiones relacionadas