Как создать набор атрибутов из style.xml?
Вот моя история:
У меня есть пользовательская группа 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 недействителен"
Я знаю, что я, вероятно, пропустил что-то очень очевидное здесь (или я?), и был бы признателен, если кто-нибудь из вас, ребята, может указать мне в правильном направлении.
Спасибо
Ответы
Ответ 1
Вам нужно начать с идентификатора ресурса для 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.
Ответ 2
Похоже, что ваш XML (R.style.my_stylez) не существует, или ваш R файл устарел.
Ответ 3
Всякий раз, когда вы делаете новые дополнения к каталогу res, это хорошая идея для очистки и сборки проекта. Но с ADT 15 это не всегда хорошо работает. Иногда вам нужно сделать еще один шаг и удалить каталог bin, а также каталог gen.
После того как adt воссоздает эти два каталога, попробуйте снова запустить очистку.
Ответ 4
Кажется довольно ясным, оглядываясь вокруг, что это просто невозможно. Сожалею. Я искренне желаю, чтобы это было возможно...
Ответ 5
Метод 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 и передать его.
Я отправлю ответ, когда у меня будет ответ для второй части, но образцы кода должны решить