【问题标题】:Android problem changing app language programmaticallyAndroid问题以编程方式更改应用程序语言
【发布时间】:2020-01-22 10:23:01
【问题描述】:

我构建了一个 android 应用程序(使用 Xamarin c#),它包含一个设置屏幕,用户可以在其中更改应用程序语言。 此语言设置也通过调用 API 保存在服务器上。 更改语言后,我将文本刷新到设置屏幕和其他打开的活动中,一切似乎都正常。

问题是当我关闭并重新打开应用程序时:我登录用户并从服务器读取语言数据。 我以编程方式将应用程序的区域设置语言更改为我的主要活动:例如,我设置了与默认智能手机语言不同的语言。 这个活动在 ViewPager 中包含 4 个片段,但有时这些片段是“旧”语言,而“新”语言未正确应用。 因此,当我打开一个新活动时,显示的语言是“旧”而不是“新”。

我做错了吗? 谁能帮帮我?

按照我的代码:

在我的 AppBaseActivity 类中,OnCreate 事件:

base.OnCreate(bundle);

if (UserSettings != null
    && !string.IsNullOrWhiteSpace(UserSettings.LanguageCode))
{
    LocaleManager.ChangeAppLanguage(this, UserSettings.LanguageCode);
}

在我的 AppBaseActivity 类中,OnResume 事件:

base.OnResume();

if (UserSettings != null
    && !string.IsNullOrWhiteSpace(UserSettings.LanguageCode))
{
    LocaleManager.ChangeAppLanguage(this, UserSettings.LanguageCode);
}

我的 LocaleManager.ChangeAppLanguage 方法:

public static bool ChangeAppLanguage(Context context, String lang, bool saveInSharedPreferences)
        {
            Locale newLocale = new Locale(lang);

            if (Locale.Default.Language != newLocale.Language)
            {
                Locale.Default = newLocale;
                Android.Content.Res.Configuration config = new Android.Content.Res.Configuration();

                if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                {
                    config.SetLocale(newLocale);
                }
                else
                {
                    config.Locale = newLocale;
                }

                context.Resources.UpdateConfiguration(config, context.Resources.DisplayMetrics);

                if (saveInSharedPreferences)
                    return Helper.SaveInSharedPreferences(context, context.ApplicationContext.PackageName + ".languageCode", lang);

                return true;
            }

            return false;
        }

【问题讨论】:

    标签: c# android xamarin locale


    【解决方案1】:

    你应该在你的AppBaseActivity的AttachBaseContext方法中加载新的Context,你可以参考here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-01
      • 2018-08-09
      • 1970-01-01
      • 2012-01-13
      • 2012-09-16
      • 2021-04-13
      相关资源
      最近更新 更多