在片段中更改整个应用程序的语言?
比方说,这是调用堆栈:在片段中更改整个应用程序的语言?
Fragment2(当前位置)
片段1
HostingActivity
用户刚刚导航到fragment2(这是设置屏幕)。他选择第二种语言,然后导航回Fragment1。我希望应用在他进入fragment1后立即显示第二种语言的内容。
我读过最好的办法是让所有的片段都来自配置OnResume()
方法中的区域设置的基片段。
public class BaseFragment : Fragment
{
public override void OnResume()
{
string langCode = prefs.GetString("settings_language", "en_US");
Resources res = Application.Context.Resources;
// Change locale settings in the app.
DisplayMetrics dm = res.DisplayMetrics;
Configuration conf = res.Configuration;
conf.SetLocale(new Locale(langCode.ToLower()));
res.UpdateConfiguration(conf, dm);
OnConfigurationChanged(conf);
base.OnResume();
}
}
我试过这个,但没有任何运气。我没有看到任何变化。 我很乐意听取任何建议。
PS。为了确保我没有在Android文件夹中搞乱Android所需的任何命名约定,我尝试使用我想要的语言重新启动模拟器(使用adb shell),并按预期工作。
您可以创建一个基类,设置CurrentCulture
喜欢这一点,从它继承:
internal class MyBaseActivity : Activity
{
protected override void OnResume()
{
base.OnResume();
// Get the language from wherever.
var userSelectedCulture = new CultureInfo ("fr-FR");
Thread.CurrentThread.CurrentCulture = userSelectedCulture;
}
}
这里是如何继承并使用它:
public class MainActivity : MyBaseActivity
{
protected override void OnResume()
{
base.OnResume(); // Do not forget to call base.OnResume()
// Rest of Your Code...
}
}
我知道这适用于活动,但正如我所说 - 我已经尝试过这种方法,我我很难用碎片做这件事。你有没有运气使用这种方法的碎片? – rasperryPi
这种方法有效吗? – rasperryPi
@ YorkShen-MSFT我我不完全确定如何使用'tags'会有什么不同。你能解释一下吗? – rasperryPi
参考:https://*.com/questions/38022709/android-refresh-current-fragment-after-language-change –