styles.xml中使用的自定义attrs参数

时间:2010-11-24 10:03:29

标签: android

我在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"
>

希望在这里可以应用每个布局声明中使用的相同逻辑,但没有成功。

3 个答案:

答案 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