2015-05-27 225 views
1

我正在嘗試添加語言控制器,這意味着更改我的應用程序的語言。Android - 更改語言環境(語言)

我已經添加了4個標誌(ImageView),並且每當我按下我想要的標誌時,我都希望應用程序更改相關標誌的語言。

Main Menu

的應用程序開始時是英文的,當我按下丹麥falg的語言並切換到丹麥,但每當我想改回英文,沒有任何反應。

我在自己的價值的文件夾了幾個文件的strings.xml

value-en/strings.xml 
value-dk/strings.xml 

方法改變語言:

english.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Locale locale = new Locale("en"); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     getResources().updateConfiguration(config,getResources().getDisplayMetrics()); 
      setContentView(R.layout.activity_main); 
    } 
}); 

english是我的ImageView的

+0

你的代碼是完全正確的。運行這段代碼發生了什麼問題? – user2477865

+0

語言根本不會改變。它保持丹麥語 – Detilium

+0

在本地使用「en_US」而不是「en」。 –

回答

1
變量

我找到了我的解決方案。

爲了節省onClickListener()我的其他組件,我需要刷新活動,貼在下面:

要重新啓動

我只是做類似下面的方法活動:

//Restarts the activity after changing the languagse 
private void RestartActivity(){ 
    Intent intent = getIntent(); 
    finish(); 
    startActivity(intent); 
} 

每次我改變語言,我運行的方法:

english.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Locale locale = new Locale("en"); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     getResources().updateConfiguration(config,getResources().getDisplayMetrics()); 
     setContentView(R.layout.activity_main); 
     RestartActivity(); //Run the method as the last thing 
    } 
}); 

由於某些原因,聽衆沒有看到mto留下來,但此解決方案適用於我。

0

我在代碼下面測試,它按照我的考慮工作。檢查它會幫助你。 在您的點擊偵聽器上調用此方法並將區域設置字符串作爲參數傳遞。

私人無效setDeviceDefaultLanguage(字符串languageToLoad){

Locale locale = new Locale(languageToLoad); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    getResources().updateConfiguration(config, 
      getResources().getDisplayMetrics()); 
    Intent i = getBaseContext().getPackageManager() 
      .getLaunchIntentForPackage(getBaseContext().getPackageName()); 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(i); 
}