2014-01-13 162 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

相关问题