这不是关于枚举被问了一百万次的问题。
我将枚举定义为 styleable 属性的一部分(用于自定义小部件)
<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;
}
但这不起作用,a.getString(...)
返回"1"
“RGB”的值,我得到一个抛出的异常 ,因为:mColorMode
null
ColorMode.valueOf("1") == null
代替
ColorMode.valueOf("RGB") == ColorMode.RGB
注意:我想强调 ColorMode 不是enum
导致问题的原因,我需要从中获取名称的枚举是问题顶部的枚举,以 XML 声明。是的,它们具有相同的名称,但我不能依赖它们具有相同的数值。