如何为不同的标签声明几个具有相同名称的可样式化属性?

我希望我的 ViewA 和 ViewB 都有“title”标签。但我不能把这个放进去:attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="ViewA">
        <attr name="title" format="string" />
    </declare-styleable>
    <declare-styleable name="ViewB">
        <attr name="title" format="string" />
        <attr name="max" format="integer" />
    </declare-styleable>
</resources>

由于错误,属性“标题”已被定义另一个问题显示了这个解决方案:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="title" format="string" />
    <declare-styleable name="ViewB">
        <attr name="max" format="integer" />
    </declare-styleable>
</resources>

但在这种情况下,并且不会生成。我需要它们来使用以下代码从属性集中读取属性:R.styleable.ViewA_titleR.styleable.ViewB_title

TypedArray a=getContext().obtainStyledAttributes( as, R.styleable.ViewA);
String title = a.getString(R.styleable.ViewA_title);

我该如何解决这个问题?


答案 1

您发布的链接确实为您提供了正确的答案。这是它建议你做的:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="title" format="string" />
    <declare-styleable name="ViewA">
        <attr name="title" />
    </declare-styleable>
    <declare-styleable name="ViewB">
        <attr name="title" />
        <attr name="max" format="integer" />
    </declare-styleable>
</resources>

现在,两者都可以访问。R.styleable.ViewA_titleR.styleable.ViewB_title

如果你有机会,通读这个答案:链接。相关引用:

您可以在顶部元素或元素内部定义属性。如果我要在多个地方使用attr,我会把它放在根元素中。


答案 2

请改为执行此操作。无需标记parent

<resources>
    <declare-styleable name="ViewA">
        <attr name="title" format="string" />
    </declare-styleable>

    <declare-styleable name="ViewB" >
        <attr name="title" /> 
        <attr name="min" format="integer" />
        <attr name="max" format="integer" />
    </declare-styleable>
</resources>

这是因为一旦在 中声明,它就不需要(也不能)在另一个中再次声明。titleViewAdeclare-styleable


推荐