亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法在應用程序運行時更改語言

有沒有辦法在應用程序運行時更改語言

C#
慕蓋茨4494581 2022-11-21 21:39:42
每個人。:) 我有一個具有多布局的應用程序,我正在嘗試在運行該應用程序時更改語言。我發現這段代碼可以幫助我更改語言using Android.Content;using Android.OS;using Java.Util;namespace RuntimeAppLanguage{    internal class LanguageManager    {        private const string MYLANGUAGE = "myLanguage";        private const string MYPREF = "myPreference";        public static Context LoadLanguage(Context context)        {            var loadedLanguage = GetLanguage(context, Locale.Default.Language);            return ChangeLanguage(context, loadedLanguage);        }        public static Context ChangeLanguage(Context context, string language)        {            SaveLanguage(context, language);            if (Build.VERSION.SdkInt >= BuildVersionCodes.N)            {                return ChangeForAPI24(context, language);            }            return ChangeForLegacy(context, language);        }        private static string GetLanguage(Context context, string Language)        {            var privatePreference = context.GetSharedPreferences(MYPREF, FileCreationMode.Private);            return privatePreference.GetString(MYLANGUAGE, Language);        }        private static void SaveLanguage(Context context, string language)        {            var privatePreference = context.GetSharedPreferences(MYPREF, FileCreationMode.Private);            var editor = privatePreference.Edit();            editor.PutString(MYLANGUAGE, language);            editor.Apply();        }        private static Context ChangeForAPI24(Context context, string language)        {            // for api >= 24            var locale = new Locale(language);            Locale.Default = locale;            var configuration = context.Resources.Configuration;            configuration.SetLocale(locale);            configuration.SetLayoutDirection(locale);            return context.CreateConfigurationContext(configuration);        }              }    }}我試圖讓它在這種布局下工作,但我最終得到了循環:(我想做的是當用戶選中英語時,阿拉伯語開關變為取消選中等等。
查看完整描述

1 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

我用“Chinese”,“English”和“Thailand”寫了一個簡單的例子,是否滿足你的需求:

1.LanguageManager,代碼同上。

2. MainActivity,包括一個TextView和一個Button;

3.在BaseActivity

public class BaseActivity: AppCompatActivity

{

    protected override void AttachBaseContext(Context @base)

    {

        base.AttachBaseContext(LanguageManager.LoadLanguage(@base));

    }


}

4.在可以設置語言的SettingActivity中,axml和你的類似


public class SettingActivity : BaseActivity, CompoundButton.IOnCheckedChangeListener

{

    private Switch swCh;

    private Switch swEn;

    private Switch swTh;

    private Bundle s;

    protected override void OnCreate(Bundle savedInstanceState)

    {

        base.OnCreate(savedInstanceState);

        SetContentView(Resource.Layout.setting);

        // Create your application here

        initView();

    }


    private void initView()

    {

        Button back = FindViewById<Button>(Resource.Id.back);

        back.Click += delegate { Finish(); };

        swCh = FindViewById<Switch>(Resource.Id.switch1);

        swEn = FindViewById<Switch>(Resource.Id.switch2);

        swTh = FindViewById<Switch>(Resource.Id.switch3);

        var s = GetSharedPreferences("myPreference", FileCreationMode.Private).GetString( "myLanguage", Locale.Default.Language);

        switch (s)

        {

            case "ch":

                swCh.Checked = true;

                break;

            case "en":

                swEn.Checked = true;

                break;

            case "th":

                swTh.Checked = true;

                break;

        }

        swCh.SetOnCheckedChangeListener(this);

        swEn.SetOnCheckedChangeListener(this);

        swTh.SetOnCheckedChangeListener(this);

    }


    public void OnCheckedChanged(CompoundButton buttonView, bool isChecked)

    {

        if (isChecked)

        {


        switch (buttonView.Id)

        {

            case Resource.Id.switch1:

                swEn.Checked = false;

                swTh.Checked = false;

                LanguageManager.ChangeLanguage(this, "ch");

                break;

            case Resource.Id.switch2:

                swCh.Checked = false;

                swTh.Checked = false;

                LanguageManager.ChangeLanguage(this, "en");

                    break;

            case Resource.Id.switch3:

                swEn.Checked = false;

                swCh.Checked = false;

                LanguageManager.ChangeLanguage(this, "th");

                    break;

        }

             //restart application to change language

            Intent intent = new Intent(this, typeof(MainActivity));

            intent.SetFlags(ActivityFlags.ClearTask | ActivityFlags.NewTask);

            StartActivity(intent);

        }

    }


}

5.創建包含每種語言的values-en , values-thstrings


a.值/字符串


<string name="change_language">改變語言</string>

<string name="setting">設置</string>

<string name="chinese">中文</string>

<string name="english">英語</string>

<string name="thailand">泰語</string>

b.values-en/字符串


<string name="change_language">change language</string>

<string name="setting">setting</string>

<string name="chinese">chinese</string>

<string name="english">english</string>

<string name="thailand">thailand</string>

c.values-th/字符串


<string name="change_language">???????????</string>

<string name="setting">??????</string>

<string name="chinese">??????</string>

<string name="english">??????</string>

<string name="thailand">?????????</string>

ps: Text中的所有內容都要使用@string/***,并且每種語言在values/string


像這樣的效果:

https://i.stack.imgur.com/JQl9X.gif

查看完整回答
反對 回復 2022-11-21
  • 1 回答
  • 0 關注
  • 142 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號