我无法从XML资源中读取AttributeSet

时间:2011-01-24 21:48:26

标签: 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!!??

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>

为什么我不能读取属性?

2 个答案:

答案 0 :(得分:16)

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

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

答案 1 :(得分: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());

依旧......

我希望这是你需要的。