Можно ли добавить пользовательское свойство в стиль на ресурсе Android? - PullRequest
23 голосов
/ 29 августа 2011

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

<org.taptwo.android.widget.TitleFlowIndicator
    ...
    app:footerTriangleHeight="0dip"
    ... />

Я повторно использую этот компонент в нескольких макетах, и я хотел бы поместить свойства в стиль. Но когда я делаю это, парсер говорит Error: No resource found that matches the given name: attr 'app:footerTriangleHeight', даже если я добавлю пространство имен в файл стилей.

Есть ли способ сделать это в Android?

Спасибо.

Ответы [ 2 ]

39 голосов
/ 29 августа 2011

Приложение для Android

Если вы не используете библиотеки Android, вот что вы можете сделать:

  1. Определить настраиваемый настраиваемый атрибут (думаю, выВы уже сделали это).
  2. Не используйте префикс пространства имен в элементах стиля (пространство имен по умолчанию соответствует пространству имен текущего приложения).

Пример:

В 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 совпадает с пространством имен приложения (с точки зрения инструмента 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 текущего приложения, хотя вы не можете явно указать это пространство имен.

6 голосов
/ 29 августа 2011

Вы можете определить стиль в терминах своего пространства имен, я сам его использовал

т.е.

<style name="whatever">
    <item name="YourPackage.YourSubPackage:parametername">@drawable_or_anything/bla</item>
</style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...