c# - Android问题以编程方式更改应用程序语言
问题描述
我已经构建了一个 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;
}
解决方案
你应该在你的 AppBaseActivityContext
的 AttachBaseContext
方法中加载新的,你可以参考这里