Как я могу создать AttributeSet из style.xml? - PullRequest
17 голосов
/ 10 декабря 2010

Вот моя история:

Я получил пользовательскую ViewGroup, которую я хочу создать из кода, используя предопределенный стиль, мой подход до сих пор заключался в создании объекта AttributeSet из элемента style.xml, например так (предупреждение, остерегайтесь кода копирования-вставки впереди):

    XmlPullParser parser = getResources().getXml(R.style.my_stylez);
    AttributeSet attributes = Xml.asAttributeSet(parser);

Но при этом я получаю сумасшедшую ошибку: "..android.content.res.Resources $ NotFoundException: идентификатор ресурса # 0x7f090002 type #0x12 недопустимо "

Я знаю, что, возможно, здесь упускаю что-то очень очевидное (или я?), И был бы благодарен, если кто-то из вас, ребята, может указать мне правильное направление.

Спасибо

Ответы [ 5 ]

7 голосов
/ 14 июля 2014

Вам необходимо начать с идентификатора ресурса для файла XML, предпочтительно в формате res / xml.Затем вы можете получить AttributeSet, сначала создав XmlPullParser:

Resources res = context.getResources();
XmlPullParser parser = res.getXml(R.xml.some_xml_file);

// Seek to the first tag.
int type = 0;
while (type != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) {
    type = parser.next();
}

// Wrap as an attribute set.
AttributeSet attrs = Xml.asAttributeSet(parser);

Примеры этого можно найти в тестах CTS для рисования в AOSP.

0 голосов
/ 17 января 2014

Метод getXml будет читать из res / xml, а не из res / values, я думаю, что идея заключается в том, что вы используете один из других методов для получения данных, таких как

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomTheme);

изатем извлекаем значения из TypedArray:

thingColor = a.getColor(R.styleale.myCustomColor, res.getColor(R.color.myDefaultColor));

Это работает для таблиц стилей, однако моя проблема заключается в том, чтобы в первую очередь использовать атрибуты AttributeSet из XML для использования в качестве переопределений, и позволить людям указать, какой XML-файл ониво время выполнения, накачайте его в AttributeSet и передайте его.

Я отправлю ответ, когда у меня будет ответ для второй части, но примеры кода должны решить

0 голосов
/ 15 февраля 2012

Когда бы вы ни делали новые добавления в каталог res, хорошей идеей будет очистить и собрать проект.Но с ADT 15 это не всегда хорошо работает.Иногда вам нужно пойти еще дальше и удалить каталог bin, а также каталог gen.

После того, как adt воссоздает эти два каталога, попробуйте снова выполнить очистку.

0 голосов
/ 25 ноября 2012

Кажется, довольно ясно, глядя вокруг, что это просто невозможно. Сожалею. Я действительно желаю, чтобы это было возможно ...

0 голосов
/ 03 июня 2011

Похоже, ваш XML (R.style.my_stylez) не существует или ваш R-файл устарел.

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