Localization/Language 首选项不会更改 android 中的小部件语言

Localization/Language preferences doesn't change widget's language in android

在我的应用程序中,我让用户更改 application.I 的语言,这样做是这样的:

        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);


        }

我可以通过此 code.But 更改所有活动中的首选本地化 widgets.Widgets 本地化无效 widgets.Widgets 始终以 phone 的本地语言出现。

如您所见,我在 LOG 行上检查了默认语言和首选语言,一切正常。它们根据小部件的语言选择 onUpdate 方法而变化。

在我看来,小部件看不到自定义本地化首选项,因为它在主屏幕上运行并且它看到 phone.Is 的本地化首选项,对吗?

那么,是不是无法更改小部件的语言?我该如何处理?

But localization doesn't work for widgets.Widgets always appear in local language of phone.

您在更改区域设置之前调用了 updateAppWidget(context, appWidgetManager, appWidgetIds[i]);。因此,您在 updateAppWidget() 中通过 getString() 获得的任何字符串都将使用默认设备区域设置。

将您的 updateAppWidget() 调用移到更改进程区域设置的代码之后。如果这没有帮助,请 post 代码到 updateAppWidget(),因为您设置 RemoteViews 的方式可能存在问题。

尝试android:supportsRtl="false"