0

我正在寻找一种方法来实现由按钮 onclick 触发的语言更改。我在适当的文件夹中创建了适当的 strings.xml(例如 res/values-en/)这是我的按钮代码:

Button setEN_bt = (Button) findViewById(R.id.setEN);        
setEN_bt.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Locale locale_en = new Locale("en"); 
            Locale.setDefault(locale_en);
            Configuration config_en = new Configuration();
            config_en.locale = locale_en;
            getBaseContext().getResources().updateConfiguration(config_en, getBaseContext().getResources().getDisplayMetrics());
        }
    });

所以基本上我用 onclick 改变了语言环境,但是页面之后没有刷新(为什么应该......:))。有人可以告诉我如何刷新/重新加载活动吗?

提前感谢您的帮助。

4

4 回答 4

1

你可以试着打电话

view.invalidate();

在您想要重绘本身的视图上。

我不确定这是否会重新加载语言环境。如果没有,您可以通过为自己创建一个新的 Intent 来重新启动 Activity:

Intent intent = new Intent(this, Activity.class);
startActivity(intent);

干杯

于 2012-10-30T13:36:17.797 回答
1

您可以使用

startActivity(new Intent(CurrentActivity.this, CurrentActivity.class)); 结束(); 并在 onclick 方法的最后使用 finish() 方法完成上一个活动。

于 2012-10-30T14:01:27.790 回答
1

您可以调用以下命令,而不是调用 startActivity() 和 finish()

recreate(); // which is available from API Level 11.

我在这里找到了这个答案,它有另一种针对较低 API 级别的好方法: 如何重新启动 Android 活动

于 2014-09-14T13:56:42.277 回答
0

第一种方法

     String languageToLoad  = "en";
     Locale locale = new Locale(languageToLoad); 
     Locale.setDefault(locale);
     Configuration config = new Configuration();
     config.locale = locale;
     context.getResources().updateConfiguration(config,context.getResources().getDisplayMetrics());

     Intent intent = new Intent(XYZ.this, XYZ.class);
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//it will recreate it self with new language.
     startActivity(intent);

更改语言环境后,您需要重新启动 Activity。

第二种方法

 mLocale = new Locale("en");
          Locale.setDefault(mLocale); 
          Configuration config = new Configuration();
          config.locale = mLocale;
          getBaseContext().getResources().updateConfiguration(config, 
          getBaseContext().getResources().getDisplayMetrics());
          MainActivity.this.setContentView(R.layout.activity_main);//reset layout 

但它会起作用api>=11

于 2015-02-07T18:42:44.900 回答