2011-01-24 5 views
12

Я пытаюсь прочитать AttributeSet из файла ресурсов XML. Соответствующий код выглядит следующим образом:Я не могу прочитать AttributeSet из своих ресурсов 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, поэтому Android не читает никаких признаков вообще!

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> 

Почему я не могу прочитать атрибуты?

+0

Я не много работал с этим, но знаете ли вы, начинаете ли вы с корневого элемента или если парсер запускается до корневого элемента? Мне интересно, если вы вызываете getnext, если это переместит вас в корневой элемент или нет. –

ответ

15

Проблема заключалась в непонимании функционирования синтаксического анализатора. После строки:

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

анализатор находится в начале документа, и до сих пор не читал какой-либо элемент, поэтому нет AttributeSet, потому что атрибуты, конечно, всегда по отношению к текущему элементу. Поэтому, чтобы исправить это, я должен был выполнить следующее, которое выполняет итерацию по элементам до тех пор, пока я не доберусь до «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

Я также благодарю вас. –

0

Если я понимаю правильно, вы должны прочитать атрибуты из TextView, например, текст внутри TextView или ID и так далее?

Я хотел бы сделать это следующим образом:

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()); 

и так далее ...

Я надеюсь, что это то, что вам нужно.

+0

Нет. В этом случае TextView еще не существует, вместо этого он содержится в файле ресурсов XML. Я хочу прочитать этот файл ресурсов и создать из него TextView, но я не получаю никаких атрибутов. – Roland

Смежные вопросы