重复使用Android自定义枚举XML属性

28

我正在XML中定义一个枚举类型的自定义属性。它看起来像这样:

<declare-styleable name="MyControl">
    <attr name="myProperty">
        <enum name="None" value="0"/>
        <enum name="One" value="1"/>
        <enum name="Two" value="2"/>
        <enum name="Three" value="3"/>
        <enum name="Four" value="4"/>
        <enum name="Five" value="5"/>
        <enum name="Six" value="6"/>
        <enum name="Seven" value="7"/>
        <enum name="Eight" value="8"/>
        <enum name="Nine" value="9"/>
        <enum name="Ten" value="10"/>
    </attr>
</declare-styleable>

现在假设我想让另一个无关的类使用这个相同的枚举值集合。是否有一种方法可以在不复制新节点中的枚举列表的情况下实现此目的?例如,类似于以下语义的东西:

 <declare-styleable name="MyUnrelatedControl">
    <attr name="myProperty" format="[myEnum Format Reference]"/>
 </declare-stylable>
1个回答

56

只需在控件外定义属性:

<attr name="myProperty" format="enum">
    <enum name="None" value="0"/>
    <enum name="One" value="1"/>
    <enum name="Two" value="2"/>
    <enum name="Three" value="3"/>
    <enum name="Four" value="4"/>
    <enum name="Five" value="5"/>
    <enum name="Six" value="6"/>
    <enum name="Seven" value="7"/>
    <enum name="Eight" value="8"/> 
    <enum name="Nine" value="9"/>
    <enum name="Ten" value="10"/>
</attr>

然后将其用于您的所有控件:
<declare-styleable name="MyControl">
    <attr name="myProperty"/>
</declare-styleable>

<declare-styleable name="MyUnrelatedControl">
    <attr name="myProperty"/>
</declare-styleable>

5
好的,谢谢。也许你知道如何在同一对象中使用两个不同的属性和相同的枚举值进行操作。例如,我的类有_myProperty属性和_myOtherProperty属性,它们都可以具有相同的枚举值? - ptoinson
4
这是个好问题。不幸的是,我不知道如何做到这一点,尽管它似乎应该存在。也许值得研究一下 Android 源代码中如何定义 layout_widthlayout_height 等内容,因为我想他们会重用 wrap_contentmatch_parent - Kevin Coppock
3
从查看Android源代码来看,它们每次都进行定义,因此我认为可能没有更简化的方法。 - Kevin Coppock
我这里有一个额外的要求,这是来自Java文件中的枚举类型,例如ellipsize,我想访问该Java文件中的该枚举类型。我们能否对EditText也进行相同的操作? - Sushant Gosavi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接