2011-01-24 19 views
12

Tôi đang cố đọc một AttributeSet từ một tệp tài nguyên XML. Mã liên quan như sau:Tôi không thể đọc AttributeSet từ tài nguyên XML của mình

//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, vì vậy Android không đọc bất kỳ thuộc tính nào cả!

Các tập tin 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> 

Tại sao tôi không thể đọc được thuộc tính?

+0

Tôi đã không làm việc nhiều với điều này, nhưng bạn có biết nếu bạn bắt đầu trên phần tử gốc hoặc nếu trình phân tích cú pháp bắt đầu trước phần tử gốc? Tôi tự hỏi nếu bạn gọi getnext nếu điều đó sẽ chuyển bạn đến phần tử gốc hay không. –

Trả lời

15

Vấn đề là sự hiểu lầm về chức năng của trình phân tích cú pháp. Sau dòng:

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

trình phân tích cú pháp ở đầu tài liệu, do đó không có thuộc tính vì thuộc tính dĩ nhiên luôn liên quan đến phần tử hiện tại. Vì vậy, để khắc phục điều này, tôi phải làm như sau đang lặp qua các phần tử cho đến khi tôi nhận được "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

Tôi cũng cảm ơn bạn. –

0

Nếu tôi hiểu đúng, bạn cần phải đọc các thuộc tính từ TextView ví dụ Text bên trong TextView hoặc ID và vân vân?

tôi sẽ làm cho nó như sau:

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

và vân vân ...

Tôi hy vọng đây là những gì bạn cần.

+0

Không. Trong trường hợp này, TextView thậm chí không tồn tại, thay vào đó nó được chứa trong một tệp tài nguyên XML. Tôi muốn đọc tập tin tài nguyên này và tạo một TextView từ nó, nhưng tôi không nhận được bất kỳ thuộc tính nào. – Roland

Các vấn đề liên quan