switch language

来源:互联网 发布:mac玩刺客信条卡怎么办 编辑:程序博客网 时间:2024/06/11 07:24
应用内部语言切换
一般应用内部进行语言切换可以使用下面这段代码,可以使用在2.x平台和4.0等平台:
private void changeLanguage(Locale locale) {if (locale != getResources().getConfiguration().locale) {Resources res = getResources();Configuration config = res.getConfiguration();config.locale = locale;DisplayMetrics dm = res.getDisplayMetrics();res.updateConfiguration(config, dm);Intent i = getIntent();i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(i);}}

上面那段代码就是应用内部语言切换,不会切换系统语言,不消耗系统资源,比较方便。
 
切换系统语言主要考虑太消耗系统资源,如更改配置,清除资源,重新启动并加载资源,包括所有app资源,还有动画等。。。所以消耗比较大,不建议对系统进行切换 1:待测试 public class MainActivity extends Activity {SharedPreferences mPrefs1;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    mPrefs1 = PreferenceManager.getDefaultSharedPreferences(this);    String languageToLoad = mPrefs1.getString("languagePref", Locale.getDefault().getLanguage());    Locale locale = new Locale(languageToLoad);     Locale.setDefault(locale);    Configuration config = new Configuration();    config.locale = locale;    getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());    setContentView(R.layout.activity_main);}@Overridepublic void onConfigurationChanged(Configuration newConfig) {  super.onConfigurationChanged(newConfig);    mPrefs1 = PreferenceManager.getDefaultSharedPreferences(this);    String languageToLoad = mPrefs1.getString("languagePref", Locale.getDefault().getLanguage());    Locale locale = new Locale(languageToLoad);     Locale.setDefault(locale);    Configuration config = new Configuration();    config.locale = locale;    getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());    setContentView(R.layout.activity_main);}// Declaring the Menu options@Overridepublic boolean onCreateOptionsMenu(Menu menu){           MenuInflater inflater = getMenuInflater();    inflater.inflate(R.menu.main_menu, menu);    return true;}//handle menu item selectionpublic boolean onOptionsItemSelected(MenuItem item){  switch (item.getItemId()) {    case R.id.menu_switch_language:        String languageToLoad  = getResources().getString(R.string.switch_language);        mPrefs1 = PreferenceManager.getDefaultSharedPreferences(this);        SharedPreferences.Editor editor = mPrefs1.edit();        editor.putString("languagePref", languageToLoad);        editor.commit(); // Very important to save the preference                              finish();        startActivity(getIntent());        return true;    default:        return super.onOptionsItemSelected(item);  }}   url:http://stackoverflow.com/questions/2324418/android-forced-locale-resetted-on-orientation-changes2:
import android.app.Activity;import android.content.res.Configuration;import android.os.Bundle;public class Main extends Activity {  /** Called when the activity is first created. */  @Override  public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    String languageToLoad  = "cn";    Locale locale = new Locale(languageToLoad);     Locale.setDefault(locale);    Configuration config = new Configuration();    config.locale = locale;    getBaseContext().getResources().updateConfiguration(config,     getBaseContext().getResources().getDisplayMetrics());    this.setContentView(R.layout.main);  }}
 预期:2.2以上无效,即使manifest配置locale属性。待测试

3:
  Resources standardResources = getBaseContext().getResources();    AssetManager assets = standardResources.getAssets();    DisplayMetrics metrics = standardResources.getDisplayMetrics();    Configuration config = new Configuration(standardResources.getConfiguration());    config.locale = new Locale(languageToLoad);    Resources defaultResources = new Resources(assets, metrics, config);


原创粉丝点击