我正在寻找一种方法来实现按钮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提前获得帮助。
答案 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