我目前正致力于在Android应用上动态更改语言环境。当用户的语言环境发生变化时,我将信息存储在SharedPreferences中,每个Activity在创建时都会引用语言环境信息。
但是,我的应用程序中的静态方法存在一些问题,尤其是在我的Util类中。我在静态方法中使用特定于语言环境的字符串,但由于它们已经在内存中,因此不会重新加载它们。
似乎android会在设备区域设置更改时重新加载所有类,因为更改设备语言/区域设置会显示所有适当的区域设置字符串。如何在更改用户语言后手动执行此操作?
以下是我的应用程序的 onConfigurationChanged 中调用的代码,以及我的活动的 attachBaseContext 。
Resources res = context.getResources();
Configuration config = new Configuration(res.getConfiguration());
config.setLocale(getLocale());
context = context.createConfigurationContext(config);
更新 这是我的代码中有一个与静态方法有关的问题的例子。
public static String convertPassedDayFormat(Date date) {
BaseApplication app = BaseApplication.get();
int diffDay = diffDayFromCurrent(date);
if (diffDay < 1) return app.getString(R.string.word_today);
if (diffDay < 2) return app.getString(R.string.word_yesterday);
if (diffDay < 4) return String.format(app.getString(R.string.word_day_passed), diffDay);
return convertFormat(date, app.getString(R.string.format_print_day_year));
}
这部分代码不会返回适当的字符串。
答案 0 :(得分:0)
问题的问题出在静态方法convertPassedDayFormat
()中,用于获取字符串资源,您使用的旧上下文可能不包含更新的配置(因为它是静态的)
您需要做的是,不应从BaseApplication.get()
获取静态上下文方法,而应将新的上下文作为参数传递给静态方法,如下所示
public static String convertPassedDayFormat(Date date, Context app) {
int diffDay = diffDayFromCurrent(date);
if (diffDay < 1) return app.getString(R.string.word_today);
if (diffDay < 2) return app.getString(R.string.word_yesterday);
if (diffDay < 4) return String.format(app.getString(R.string.word_day_passed), diffDay);
return convertFormat(date, app.getString(R.string.format_print_day_year));
}