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);