我无法从XML资源中读取AttributeSet

Rol*_*and 12 android android-layout

我正在尝试从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!!??
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

为什么我不能读取属性?

Rol*_*and 16

问题是对解析器功能的误解.行后:

XmlResourceParser parser = r.getXml(R.layout.testcameraoverlay);
Run Code Online (Sandbox Code Playgroud)

解析器位于文档的开头并且尚未读取任何元素,因此没有属性集,因为属性当然总是相对于当前元素.所以为了解决这个问题,我必须执行以下操作,迭代元素直到我进入"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);
Run Code Online (Sandbox Code Playgroud)