如果用户更改设备语言,枚举静态地图将无法用于本地化

时间:2016-05-24 06:59:38

标签: android enums static

根据我的要求,应用程序必须根据设备上的区域设置更改来反映字符串更改。但是这里主要使用静态Map来保存枚举,这些枚举将在区域设置更改后重新初始化。

以下是示例代码:

public enum Color{

    Green(R.string.green),
    Warning(R.string.red),
    ENSLow(R.string.blue),
    Zero(R.string.orange),

 private static Map<String, Color> colorMap = new HashMap<String, Color>();
  private final int mResId;
}

 static {
        for Color color : values()) {
            colorMap .put(appContext.getResources().getString(state.mResId), color);
        }
    }

    Color(int resId) {
        mResId = resId;
    }

请建议我如何避免使用静态地图获取颜色?

1 个答案:

答案 0 :(得分:0)

不要以这种方式创建自己的常量。 Android已经为你做了。

只需使用appContext.getResources().getString(R.string.green)

来自Supporting Different Languages

  

在运行时,Android系统根据当前为用户设备设置的区域设置使用适当的字符串资源集。

所以你的字符串已经被缓存了。

请检查:Resources.java#Resources.getText(int)