Подтвердить что ты не робот

Я не могу прочитать AttributeSet из моих XML-ресурсов

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

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

4b9b3361

Ответ 1

Проблема заключалась в непонимании функционирования парсера. После строки:

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

Если я правильно понял, вам нужно прочитать атрибуты из 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());

и т.д.

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