在我的应用程序中,我让用户更改应用程序的语言。我这样做:
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// There may be multiple widgets active, so update all of them
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++) {
updateAppWidget(context, appWidgetManager, appWidgetIds[i]);
int appWidgetId = appWidgetIds[i];
//get sharedPreferences
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
//get default local for first initialization
String defaultLanguage = context.getResources().getConfiguration().locale.getLanguage();
Configuration configuration = new Configuration();
//check language preference everytime onCreate of all activities, if there is no choise set default language
Locale newLocaleLanguage = new Locale(sharedPreferences.getString("newLanguagePref",defaultLanguage));
//finally setdefault language/locale according to newLocaleLanguage.
Locale.setDefault(newLocaleLanguage);
configuration.locale = newLocaleLanguage;
context.getResources().updateConfiguration(configuration, context.getResources().getDisplayMetrics());
Log.i("DefaultLanguage", defaultLanguage);
Log.i("PrefferedLanguage",sharedPreferences.getString("newLanguagePref",defaultLanguage));
appWidgetManager.updateAppWidget(appWidgetId, views);
}
我可以使用此代码更改所有活动中的优先本地。但是本地化不适用于小部件。小部件总是以手机的本地语言显示。
如您所见,在LOG行上,我检查默认语言和优先语言,并且外翻很好。它们根据语言选择onUpdate方法更改。
在我看来,小部件无法看到自定义本地化pref,因为它可以在主屏幕上工作,它可以看到手机的本地化优势。是吗?
那么,改变小部件的语言是不可能的?我该如何处理呢?
答案 0 :(得分:1)
但是本地化不适用于小部件。小部件总是以手机的本地语言显示。
在更改区域设置之前,您正在调用updateAppWidget(context, appWidgetManager, appWidgetIds[i]);
。因此,您在getString()
内通过updateAppWidget()
获得的任何字符串都将使用默认的设备区域设置。
在更改进程'区域设置的代码后移动updateAppWidget()
调用。如果这没有帮助,请将代码发布到updateAppWidget()
,因为您在设置RemoteViews
时可能存在问题。
答案 1 :(得分:0)
尝试android:supportsRtl="false"