web-dev-qa-db-ja.com

列挙型をカスタムXML属性として使用する

プロジェクトでカスタムコンポーネントを使用し、以下のような列挙型属性に追加したいのですが、どうすればよいですか?

<com.abb.abbcustomcompanents.buttons.AbbButton
        Android:id="@+id/abbBtn1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" 
        app:Type="How can i use enum here"
        />

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="abbButton">
        <attr name="Type" format="enum"/>
        <attr name="onAction" format="string"/>
    </declare-styleable>
</resources>

ありがとうございました !

42
Talha

例:

<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"/>
</attr>

次のように使用します。

<YourCustomView
    ...
    app:myProperty="One"/>

参照

https://stackoverflow.com/a/15231645/1329126

70
Sankar V

少なくともEclipseにとって、XML内の順序は重要です。宣言スタイルを上(または下)で列挙型を定義します(下ではありません)。

<attr name="quality">
    <enum name="Good" value="1" />
    <enum name="Better" value="2" />
    <enum name="Best" value="3" />
</attr>

<declare-styleable name="SquareView">
    <attr name="quality" />
</declare-styleable>

<declare-styleable name="CircleView">
    <attr name="quality" />
</declare-styleable>

列挙型が非常に長いため、読みやすくするためにXMLの末尾に配置しました。正しく解析されますが、デザインモードでは値が拒否されます。

4
Adamlive