安卓:更改语言编程(Android: Change language programmaticall

2019-06-24 15:55发布

我有3个按钮来改变语言。 所以,我需要做的方法,我在那里可以设置听众这将改变语言,他们每次按下按钮。 我想这https://stackoverflow.com/a/2900144/1088229但这种方式改变区域只有一次,似乎这不工作了(如果我再次点击,它甚至不响应)。 所以我添加changeLanguageListener()在听者的结束,让听众被刷新。

因此,它是好的,我怎么解决的,或者还有另一种途径?

private void changeLanguageListener() {
    final Button butEn = (Button) findViewById(R.id.button_language_en);
    final Button butLt = (Button) findViewById(R.id.button_language_lt);
    final Button butRu = (Button) findViewById(R.id.button_language_ru);
    OnClickListener listener = new OnClickListener() {

        public void onClick(View v) {
            Button but = (Button) v;
            Resources res = getResources();
            String current = res.getConfiguration().locale.getCountry();
            Log.i("Current", current);
            String localeString = new String(current);
            if (but.equals(butEn)) {
                localeString = "en";
            } else if (but.equals(butLt)) {
                localeString = "lt";
            } else if (but.equals(butRu)) {
                localeString = "ru";
            }
            Log.i("Clicked", localeString);

            if (!current.equalsIgnoreCase(localeString) && localeString.length() > 0) {
                // Change locale settings in the app.
                DisplayMetrics dm = res.getDisplayMetrics();
                android.content.res.Configuration conf = res.getConfiguration();
                conf.locale = new Locale(localeString.toLowerCase());
                res.updateConfiguration(conf, dm);  
                //refresh menu
                setGridView();
                //added this line to get refreshed listener
                changeLanguageListener();
            }               
        }
    };
    butEn.setOnClickListener(listener);
    butLt.setOnClickListener(listener);
    butRu.setOnClickListener(listener);
}

Answer 1:

所以,因为只有两个活动(两种菜单模式),在那里我让改变区域设置的,我只是重新启动活动区域设置更改后的权利,所以一切都将被刷新。 没有发现任何其他更好的解决办法



Answer 2:

Resources res = context.getResources();
// Change locale settings in the app.

DisplayMetrics dm = res.getDisplayMetrics();

android.content.res.Configuration conf = res.getConfiguration();

conf.locale = new Locale(language_code.toLowerCase());
res.updateConfiguration(conf, dm);

如果你有语言的具体内容 - 你可以改变的设置,底座##打头##。



Answer 3:

我不会建议改变你的应用程序中使用的语言。 一个更好的解决办法是打开的系统区域设置按钮。 您可以使用下面的意图这一点。

startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCALE, 0);

有关区域设置的详细信息: http://developer.android.com/reference/android/provider/Settings.html#ACTION_LOCALE_SETTINGS



文章来源: Android: Change language programmatically