2013-03-05 90 views
20

我在XML中定义的自定义属性是enum.It看起来是这样的:重新采用Android自定义枚举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> 

回答

47

只要定义你的控制范围之外的属性:

<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> 
+4

完善。谢谢。也许你会知道是否有办法在具有相同枚举的同一对象中使用两个不同的属性。例如,我的类具有属性_myProperty和_myOtherProperty,它们都可以具有相同的枚举值? – ptoinson 2013-03-05 19:00:58

+2

这是一个很好的问题。不幸的是,我不知道这样做的方式,尽管它看起来应该存在。可能值得研究Android源代码,看他们如何定义'layout_width'和'layout_height',或者类似的东西,因为我想他们会重用'wrap_content'和'match_parent'。 – kcoppock 2013-03-05 19:04:45

+3

从查看Android源代码,他们每次定义它们,所以我假设可能无法进一步简化它。 – kcoppock 2013-03-05 21:44:58