我在attrs.xml中定义了一组自定义Android布局参数。现在我想在styles.xml文件中使用一些标签。
目前我收到此错误:
error: Error: No resource found that matches the given name: attr 'custom:tag'
我尝试过如下声明自定义XML命名空间:
<resources
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.my.project"
>
希望在这里可以应用每个布局声明中使用的相同逻辑,但没有成功。
答案 0 :(得分:15)
XML命名空间机制用于命名标记和属性。当您定义这样的样式时:
<?xml version="1.0" encoding="utf-8"?>
<resources
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.my.project">
<style name="my_style"> <item name="custom:tag">some_value</item> </style>
</resources>
您正在尝试将XML命名空间应用于属性值,这将无效。在这种情况下,您应该直接指定包名称,如下所示:
<style name="my_style"> <item name="com.my.project:tag">some_value</item> </style>
现在Android将能够解析定义属性的位置。
答案 1 :(得分:1)
被接受的解决方案对我不起作用,但是它为情况提供了一些启示。
自定义属性已解决,可以在全局项目的程序包名称中引用,例如“ com.ltst.project”。即使您有多个模块(具有相同的基本软件包名称),资源也将以项目的软件包名称进行解析。
因此,对我来说,只需省略样式中自定义属性的任何前缀就足够了。
自定义属性:
<declare-styleable name="SampleView">
<attr name="sample_color" format="reference" />
</declare-styleable>
样式:
<style name="SampleStyle">
<item name="sample_color">@color/sample_color</item>
</style>
答案 2 :(得分:0)
您可以使用链接
xmlns: app = "http://schemas.android.com/apk/res-auto
并将每个标记的前缀定义为app