我在我的项目中使用了 View 流组件,它允许开发人员覆盖一些属性,例如:
<org.taptwo.android.widget.TitleFlowIndicator
...
app:footerTriangleHeight="0dip"
... />
我正在将此组件重用到多个布局中,并且我想将属性放入一个样式中。
但是当我这样做时,解析器会显示 Error: No resource found that match the given name: attr 'app:footerTriangleHeight'
,即使我在样式文件中添加了命名空间。
有没有办法在android中做到这一点?
谢谢。
最佳答案
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 库的命名空间与应用程序的命名空间相同(在构建期间从 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>
解析器自动默认为当前应用的 AndroidManifest
命名空间,但您不能明确指定此命名空间。
关于android - 是否可以将自定义属性添加到 android 资源的样式中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7230358/