2011-01-24 27 views
12

我試圖從XML資源文件中讀取AttributeSet。 相關的代碼如下:我無法從我的XML資源中讀取AttributeSet

//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,如果這會將你移動到根元素或不。 – 2011-01-24 23:06:48

回答

15

問題在於對解析器功能的誤解。行後:

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

解析器在文檔的開頭,還沒有讀取任何元素,因此也就不存在屬性集中,因爲屬性當然總是相對於當前元素。所以要解決這個問題,我不得不做下列迭代元素,直到我到達「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

我也謝謝你。 – 2014-03-10 04:22:07

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 2011-01-25 15:12:42