これは、列挙型について何百万回も尋ねられる質問ではありません。
列挙型をスタイル可能な属性の一部として定義します (カスタム ウィジェットの場合)
<declare-styleable name="ColorPickerPreference">
<attr name="colorMode">
<enum name="HSV" value="0"/>
<enum name="RGB" value="1"/>
<enum name="CMYK" value="2"/>
</attr>
</declare-styleable>
次に、次のように使用します。
<com.example.ColorPickerPreference
android:key="@string/prefkey_color"
android:title="@string/pref_color"
android:summary="@string/pref_color_desc"
custom:colorMode="RGB"/>
設定コンストラクターで「RGB」という名前を取得したいと思います。
public static enum ColorMode {
RGB, HSV, CMYK
};
public ColorPickerPreference(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.ColorPickerPreference, 0, 0);
try {
String p = a.getString(R.styleable.ColorPickerPreference_colorMode);
mColorMode = ColorMode.valueOf(p);
} catch( Exception e ) {
mColorMode = ColorMode.HSV;
}
しかし、これは機能せず、「RGB」の値をa.getString(...)
返し、スローされた例外が割り当てられます。"1"
mColorMode
null
ColorMode.valueOf("1") == null
それ以外の
ColorMode.valueOf("RGB") == ColorMode.RGB
注: ColorMode は問題の原因ではないことを強調したいと思いenum
ます。名前を取得する必要がある列挙型は、XML で宣言された質問の上部にある列挙型です。はい、名前は同じですが、数値が同じであるとは言えません。