2013-03-05 80 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