自定义类型的Android属性?

时间:2016-03-29 20:03:19

标签: android xml inheritance attributes

我有以下风格:

<attr name="coloring" format="enum">
    <enum name="Custom" value="0"/>
    <enum name="Black" value="1"/>
    <enum name="Gray" value="2"/>
    <enum name="LightGray" value="3"/>
    <enum name="White" value="4"/>
</attr>

我想多次应用相同的样式:

 <declare-styleable name="ComplicatedViewGroup">
    <attr name="child1coloring" **format="coloring"**/>
    <attr name="child2coloring" **format="coloring"**/>
    <attr name="child3coloring" **parent="coloring"**/>
    <attr name="child4coloring" **parent="coloring"**/>
    <attr name="child5coloring" **super="coloring"**/>
</declare-styleable>

或类似的东西。我希望能够使用相同的attr轻松自定义子视图。如果这是不可能的,那么非常凌乱且大而且非常快:

<attr name="coloring" format="enum">
    <enum name="Custom" value="0"/>
    <enum name="Black" value="1"/>
    <enum name="Gray" value="2"/>
    <enum name="LightGray" value="3"/>
    <enum name="White" value="4"/>
</attr>

 <declare-styleable name="ComplicatedViewGroup">
   <attr name="child1coloring" format="enum">
    <enum name="Custom" value="0"/>
    <enum name="Black" value="1"/>
    <enum name="Gray" value="2"/>
    <enum name="LightGray" value="3"/>
    <enum name="White" value="4"/>
</attr>
    <attr name="child2coloring" format="enum">
    <enum name="Custom" value="0"/>
    <enum name="Black" value="1"/>
    <enum name="Gray" value="2"/>
    <enum name="LightGray" value="3"/>
    <enum name="White" value="4"/>
</attr>
    <attr name="child3coloring" format="enum">
    <enum name="Custom" value="0"/>
    <enum name="Black" value="1"/>
    <enum name="Gray" value="2"/>
    <enum name="LightGray" value="3"/>
    <enum name="White" value="4"/>
</attr>
    <attr name="child4coloring" format="enum">
    <enum name="Custom" value="0"/>
    <enum name="Black" value="1"/>
    <enum name="Gray" value="2"/>
    <enum name="LightGray" value="3"/>
    <enum name="White" value="4"/>
</attr>
    <attr name="child5coloring" format="enum">
    <enum name="Custom" value="0"/>
    <enum name="Black" value="1"/>
    <enum name="Gray" value="2"/>
    <enum name="LightGray" value="3"/>
    <enum name="White" value="4"/>
</attr>
</declare-styleable>

由于所有这些样式都使用完全相同的格式和属性,因此我有一个函数可以处理传递给它的任何视图和着色值。问题是我希望能够添加更多颜色和/或功能。所以,如果我换一个,我必须改变所有这些。这非常繁琐,而且进行更改所需的时间会成倍增加。

如何在声明样式中为属性设置父/超/自定义格式?

1 个答案:

答案 0 :(得分:0)

我认为没有必要多次使用不同的名称定义相同的属性检查此链接: Define Custom Attributes