android: отражает изменение пользовательского интерфейса на лету без перезагрузки / перезапуска приложения - PullRequest
5 голосов
/ 30 сентября 2010

У меня есть настройка в моем приложении, которая позволяет пользователю выбирать другую локализацию (язык), например Chinese, German, etc.

Что я хотел бы сделать, так это то, что, как только пользователь сделает свой выбор, немедленно обновить макет со строками на текущем выбранном языке.Конечно, я хочу, чтобы изменение lang распространялось на ВСЕ текущие действия без перезагрузки приложения.

Я нашел это (еще не пробовал), но мне было интересно, есть ли более чистый способ сделать это.

http://www.tutorialforandroid.com/2009/01/force-localize-application-on-android.html

Gracias

Ответы [ 2 ]

2 голосов
/ 07 июня 2013

У меня также была эта проблема. Я использовал приведенный ниже код, а затем он изменил язык, не обновляя действие

public void setLocale(String lang) {

    myLocale = new Locale(lang);
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = myLocale;
    res.updateConfiguration(conf, dm);
    onConfigurationChanged(conf);
    /*Intent refresh = new Intent(this, AndroidLocalize.class);
    startActivity(refresh);*/
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
  // refresh your views here
    lblLang.setText(R.string.langselection);
  super.onConfigurationChanged(newConfig);
}

Надеюсь, это поможет вам .......

0 голосов
/ 08 октября 2015

Есть несколько шагов, которые вы должны реализовать

Во-первых, вам нужно изменить локаль вашей конфигурации

    Resources resources = context.getResources();

    Configuration configuration = resources.getConfiguration();
    configuration.locale = new Locale(language);

    resources.updateConfiguration(configuration, resources.getDisplayMetrics());

Во-вторых, если вы хотите, чтобы ваши изменения применялись непосредственно к макетучто видно, вы можете либо обновить представления напрямую, либо просто вызвать action.recreate (), чтобы перезапустить текущую активность.

А также вам необходимо сохранить ваши изменения, потому что после того, как пользователь закроет ваше приложение, выпотеря языкового изменения.

Я объяснил более подробное решение в своем блоге Изменение языка программно в Android

По сути, вы просто вызываете LocaleHelper.onCreate () для своего приложениякласс, и если вы хотите изменить локаль на лету, вы можете вызвать LocaleHelper.setLocale ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...