2013-03-05 2 views
20

属性次のようになります。再使用してAndroidのカスタム列挙型のXMLは、私がenum.Itである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> 

は、これを使用するために、今、私は別のを望んでいることを関係のないクラスを想定同じenum値のセット。新しいノードの新しい列挙型のリストのコピーを作ることにせずにこれを行う方法はありますか?例えば、このようなものの意味で何か:

<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

完璧。ありがとうございました。同じ列挙を持つ同じオブジェクト内の2つの異なる属性でこれを行う方法があるかどうかは、おそらく分かります。例えば、私のクラスには_myPropertyと_myOtherPropertyの両方の属性があり、どちらも同じ列挙型の値を持つことができますか? – ptoinson

+2

それはすばらしい質問です。残念ながら、私はそれを行う方法はわかりませんが、存在するはずのもののようです。 Androidのソースで 'layout_width'と' layout_height'などの定義方法について調べる価値があります。これは 'wrap_content'と' match_parent'を再利用すると思います。 – kcoppock

+3

Androidのソースを見ると、彼らは毎回それらを定義しているので、私はおそらくこれをさらに単純化する方法はないと仮定しています。 – kcoppock

関連する問題