在java android中onclick按钮语言改变

时间:2012-10-30 13:28:34

标签: java android

我正在寻找一种方法来实现按钮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更改了语言环境,但之后页面没有刷新(为什么要...... :))。有人可以告诉我如何刷新/重新加载活动吗?

Thanx提前获得帮助。

4 个答案:

答案 0 :(得分:1)

您可以尝试致电

view.invalidate();

在您要重绘的视图上。

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

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

干杯

答案 1 :(得分:1)

您可以使用

启动活动

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

答案 2 :(得分:1)

您可以调用:

,而不是调用startActivity()然后调用finish()
recreate(); // which is available from API Level 11.

我在这里找到了这个答案,它有另一个很好的方法来实现较低的API级别: How do I restart an Android Activity

答案 3 :(得分: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);

您需要在更改区域设置后重新启动活动。

第二种方法

 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