Ответ 1
Android-приложение
Если вы не используете Android-библиотеки, вот что вы можете сделать:
- Определить настраиваемый атрибут стиля (думаю, вы уже это сделали).
- Не используйте префикс пространства имен в элементах стиля (пространство имен по умолчанию относится к текущему пространству имен приложений).
Пример:
В attrs.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="testAttr" format="string"/>
</resources>
В styles.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="TestStyle" >
<item name="testAttr">asdf</item>
</style>
</resources>
Библиотека Android
Если пользовательский атрибут поступает из библиотеки Android, вы все равно можете использовать описанный подход. Теоретически это должно работать, потому что пространство имен Android Library такое же, как и приложение (с точки зрения инструмента aapt
во время сборки). Но я не испытал это сам.
Если вы укажете пространство имен, появится сообщение об ошибке. Насколько мне известно, стили не поддерживают пространства имен xml. Таким образом, это не будет выполнено:
В styles.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:app="http://schemas.android.com/apk/res/app.package.name">
<style name="TestStyle" >
<item name="app:testAttr">asdf</item>
</style>
</resources>
Parser автоматически по умолчанию использует текущее пространство имен приложений AndroidManifest
, хотя вы не можете явно указать это пространство имен.