我在我的项目中使用了一个视图流组件,它允许dev覆盖一些属性,如:
<org.taptwo.android.widget.TitleFlowIndicator
...
app:footerTriangleHeight="0dip"
... />
我正在将这个组件重用到几个布局中,我想将这些属性放入样式中。
但是当我这样做时,解析器会说Error: No resource found that matches the given name: attr 'app:footerTriangleHeight'
,即使我在样式文件中添加了命名空间。
有没有办法在android中做到这一点?
感谢。
答案 0 :(得分:39)
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
命名空间,但您无法明确指定此命名空间。
答案 1 :(得分:6)
您可以根据命名空间定义样式,我自己使用
即
<style name="whatever">
<item name="YourPackage.YourSubPackage:parametername">@drawable_or_anything/bla</item>
</style>