2012-10-30 50 views
0

我正在寻找一种方法来实现按钮onclick触发的语言更改。我在正确的文件夹中创建适当的strings.xml(例如RES /值恩/)这是我的按钮的代码:在Android中的onclick按钮语言更改android

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

所以basicly我改的地区与的onclick但页面不之后刷新(为什么它应该... :))。有人能告诉我如何刷新/重新加载活动?

Thanx寻求帮助。

+0

更改区域 –

回答

1

您可以尝试致电

view.invalidate(); 

上要重绘自己的看法。

我不确定,如果这会重新加载语言环境。

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

干杯

+0

THX的答复后,尝试调用的setContentView()。我用这个:v.invalidate(),但它没有工作,所以我尝试了意向,但它不会工作。看来我不能称之为“这个”。在按钮侦听器的方法里面。任何线索?也许我可以以某种方式将它传递给方法。 –

+1

尝试使用。如果您处于听众状态,例如“新的意图(CurrentActivity.this,NewActivity.class)”。 –

+0

THANX Florian它的工作。代码如下:\t \t Intent intent = new Intent(InvestWroclawActivity.this,InvestWroclawActivity.class); \t \t startActivity(intent); –

1

您只需使用

startActivity(新意图(CurrentActivity.this,CurrentActivity开始活动:如果没有,你可以通过为自己创造一个新的意图重新启动活动。类)); finish(); 并通过在onclick方法中使用finish()方法结束之前的活动。

+0

是的。我在上面的评论中这样做了,thanx。 –

1

而不是调用startActivity(),然后结束(),你可以拨打:

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

我发现这个答案在这里它有另一个伟大的方式来做到这一点较低API级别: How do I restart an Android Activity

+0

这很容易,但我希望这种方法没有缺点。谢谢 :) – OmarBizreh

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

您需要重新启动了变化后您的活动g语言环境。

第二种方法

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