2012-10-30 73 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