2014-01-13 208 views
6

在我的應用程序中,我有一個特殊菜單,可以更改應用程序language.I從項目API(通過解析JSON)和項目值xml獲取標籤。可以更改android應用程序語言,而無需重新啓動應用程序和сhangibg系統語言。更改Android應用程序語言

回答

7

插入此方法並調用它來更改語言。

private void setLocale (String localeCode , Bundle b){ 
    Log.d(TAG+"set location function: "+localeCode); 
    locale = new Locale(localeCode); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
    getApplicationContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
    UserDetail.this.getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
    onCreate(null); 
} 

在切換變化或任何像這樣的選擇期權價值:

setLocale("en-us",savedInstanceStat); // for english 
setLocale("ar",savedInstanceStat); // for arabic 
+0

'的OnCreate(空)'會導致異常。你需要調用'recreate()'; –

3

您可以使用切換按鈕更改語言,並在您的應用程序中設置所選語言,而無需關閉應用程序。

1.您會檢查選擇哪種語言?

String prefsToogleStr = getSharePrefrenceLocale(); 
     Log.d("tag", "CtrlDashBoard prefsToogleStr" + prefsToogleStr); 
     if (prefsToogleStr.equalsIgnoreCase("en")) { 
      toggleLocaleButton.setChecked(true); 
      CommonMethod.setLocale("en", viewDashBoard); 
     } else { 
      CommonMethod.setLocale("ur", viewDashBoard); 
      toggleLocaleButton.setChecked(false); 
     } 

////////////////////////////////////////

public String getSharePrefrenceLocale() { 

     SharedPreferences prefs = viewDashBoard.getSharedPreferences(
       viewDashBoard.getPackageName(), ViewDashBoard.MODE_PRIVATE); 

     return prefs.getString("locale", "en"); 
    } 
在切換按鈕檢查更改偵聽

2.change語言:

// Locale Toogle 
     toggleLocaleButton 
       .setOnCheckedChangeListener(new OnCheckedChangeListener() { 

        @Override 
        public void onCheckedChanged(CompoundButton buttonView, 
          boolean isChecked) { 
         if (buttonView.isChecked()) { 
          setSharePrefrenceLocale("en"); 
          CommonMethod.setLocale("en", viewDashBoard); 
         } else { 

          setSharePrefrenceLocale("ur"); 
          CommonMethod.setLocale("ur", viewDashBoard); 

         } 
         dialog.dismiss(); 
        } 
       }); 

    } 

//////////////////////////// /////////

public void setSharePrefrenceLocale(String locale) { 
     SharedPreferences prefs = viewDashBoard.getSharedPreferences(
       viewDashBoard.getPackageName(), ViewDashBoard.MODE_PRIVATE); 
     Editor editor = prefs.edit(); 
     editor.putString("locale", locale); 
     editor.commit(); 
    } 

///////// /////////////////////////////

主要方法:撥打

public static void setLocale(String localeName, Context context) { 
    Locale locale = new Locale(localeName); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    context.getResources().updateConfiguration(config, 
      context.getResources().getDisplayMetrics()); 
} 

我希望你明白。這對你有用。

+0

嘿感謝分享這一點,但它沒有做任何事情,即使重新啓動應用程序 – Tony

相關問題