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

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

语言配置是保存在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;
            }
        });
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值