【问题标题】:android: reflect UI language change on the on-the-fly without reload/restarting appandroid:即时反映 UI 语言更改,无需重新加载/重新启动应用程序
【发布时间】:2011-04-19 11:28:19
【问题描述】:

我的应用中有一个设置允许用户选择不同的本地化(语言),即Chinese, German, etc

我想要做的是,一旦用户做出选择,立即使用当前所选语言的字符串更新布局。当然,我希望将语言更改传播到所有当前活动,而无需重新加载应用程序。

我找到了这个(还没有尝试过),但想知道是否有更清洁的方法。

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

感谢

【问题讨论】:

  • 您好,您找到最佳实践了吗?谢谢

标签: android user-interface layout localization


【解决方案1】:

我也遇到了这个问题。我使用了下面的代码,然后它在不刷新活动的情况下更改了语言

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);
}

希望对你有帮助......

【讨论】:

【解决方案2】:

您应该执行一些步骤

首先,您需要更改配置的语言环境

    Resources resources = context.getResources();

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

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

其次,如果您希望您的更改直接应用于可见的布局,您可以直接更新视图,也可以调用 activity.recreate() 重新启动当前活动。

而且您还必须坚持您的更改,因为在用户关闭您的应用程序后,您将失去语言更改。

我在我的博文Change Language Programmatically in Android中解释了更详细的解决方案

基本上,您只需在应用程序类上调用 LocaleHelper.onCreate(),如果您想动态更改语言环境,您可以调用 LocaleHelper.setLocale()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2013-10-09
    相关资源
    最近更新 更多