【问题标题】:Change display language within an xamarin Android app在 xamarin Android 应用程序中更改显示语言
【发布时间】:2022-03-11 03:41:06
【问题描述】:

如何更改应用内的显示语言?我希望具有不同文化的用户可以在不改变设备的全球文化的情况下使用一台扫描仪。

我有一个带有点击事件的语言按钮,我在其中调用了一个方法:

public void SetLocale(string language = "")
{
    Locale locale = String.IsNullOrEmpty(language)
                               ? new Locale("de-DE")
                               : new Locale(language);
    Locale.Default = locale;
    var config = new global::Android.Content.Res.Configuration();
    config.Locale = locale;
    var context = global::Android.App.Application.Context;
    context.Resources.UpdateConfiguration(config, context.Resources.DisplayMetrics);
}

但不幸的是,当我按下按钮时没有任何反应。

点击事件为:

_btnen.Click += delegate
{
    SetLocale("en-GB");
};

【问题讨论】:

  • 如果任何答案对您有所帮助,请考虑将投票视为已解决/最终答案。

标签: xamarin.android localization


【解决方案1】:

什么对你有用,如果可以忘记上下文(所有属性值都可能丢失),你可以强制 Activity 重新绘制自己。

btn.Click += delegate
{
    SetLocale("en-GB");

    this.Recreate(); //this line
}

【讨论】:

    【解决方案2】:

    在@Rafael Stahl 的帮助下,我找到了以下解决方案:

    _btnen.Click += delegate
    {              
        Java.Util.Locale.Default = new Locale("en", "GB");
        Resources.Configuration.Locale = Java.Util.Locale.Default;
        Resources.UpdateConfiguration(Resources.Configuration, Resources.DisplayMetrics);
        Intent intent = new Intent(this, this.Class);
        StartActivity(intent);
    };
    

    【讨论】:

    • 此代码会创建新的Activity,这可能会在以后导致错误。 (您将留下您以前的窗口/活动,并使用具有其他语言环境的新窗口/活动)。不推荐。
    【解决方案3】:

    根据 user1230268 和 Tatranskymedved 的回答:

    _btnen.Click += delegate
    {
        Java.Util.Locale.Default = new Locale("en", "GB");
        Resources.Configuration.Locale = Java.Util.Locale.Default;
        Resources.UpdateConfiguration(Resources.Configuration, Resources.DisplayMetrics);
    
        // Redraw
        this.Recreate();
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多