Я не могу прочитать AttributeSet из моих ресурсов XML - PullRequest
12 голосов
/ 25 января 2011

Я пытаюсь прочитать 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>

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

Ответы [ 2 ]

16 голосов
/ 25 января 2011

Проблема была в недопонимании функционирования парсера. После строки:

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);
0 голосов
/ 25 января 2011

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...