您的位置:首页 > 移动开发 > Android开发

Android开发程序内部改变语言设置

2016-07-21 23:50 555 查看
项目中用到了多语言要求,又不能改变系统语言,对于这种奇葩的需求也是醉了,既然做了,还是总结一下,以备后看

语言配置是保存在SharedPreferences对象里面的,每次运行app首先读取配置,加载对应的资源,我的app里面有两种:中文和English

SharedPreferencesUtil share = new SharedPreferencesUtil(this,
Contants.ShareSettings.CONFIG);


获取当前配置

String language=share.getString(Contants.ShareSettings.LANGUAGE);//获取当前语言配置


选择配置

if(language.equals("zh")){
Resources resources =getResources();//获得res资源对象
Configuration config = resources.getConfiguration();//获得设置对象
DisplayMetrics dm = resources.getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。
config.locale = Locale.SIMPLIFIED_CHINESE; //简体中文
resources.updateConfiguration(config, dm);
this.finish();
startActivity(new Intent(this,MainActivity.class));
}else{
Resources resources =getResources();
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources.getDisplayMetrics();
config.locale = Locale.ENGLISH; //英文
resources.updateConfiguration(config, dm);
this.finish();
startActivity(new Intent(this,MainActivity.class));//刷新当前页面,不然没有变化
}


这是一段设置app内部语言为English的代码:

cbEnglish.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//应用内配置语言
Resources resources =context.getResources();//获得res资源对象
Configuration config = resources.getConfiguration();//获得设置对象
DisplayMetrics dm = resources.getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。
config.locale = Locale.ENGLISH; //英文
share.putString(Contants.ShareSettings.LANGUAGE, "ENGLISH");//保存选择的值
resources.updateConfiguration(config, dm);
activity.finish();//结束当前activity,刷新界面,不然更改了之后没有效果的
Intent intent = new Intent(context, activity.getClass());
context.startActivity(intent);
if(!currentLuanguage.equals("ENGLISH")){
NewsDao m=new NewsDao(context);//新建一个新闻实体类,调用ClearNews(context)方法清理掉数据库保存的新闻数据,重新重服务器下载
m.clearNews(context);
m=null;//释放对象
//                  SyToast.syDefaultToast(context, "更改语言之后,App将自动重启");
//                  CommonUtil.restartApp(context);//重启app
}
chooseLanguage.dismiss();
currentLuanguage=null;
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息