当前android的语言切换,很多项目中都是切换以后需要重启项目,这样的体验是不好的,如何实现当前界面切换,立即能看到效果?

目前项目中只支持中文和英文,具体实现:

在BaseActivity中:

在SharedPreUtils文件中:

public static Context selectLanguage(Context context, String language) {

Context updateContext;

//设置语言类型

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

updateContext = createConfigurationResources(context, language);

} else {

applyLanguage(context, language);

updateContext = context;

}

//保存设置语言的类型

SharedPreUtils.putString(context,Constant.LANGUAGE, language);

return updateContext;

}

@TargetApi(Build.VERSION_CODES.N)

private static Context createConfigurationResources(Context context, String language) {

//设置语言类型

Resources resources = context.getResources();

Configuration configuration = resources.getConfiguration();

Locale locale = null;

switch (language) {

case "en":

locale = Locale.ENGLISH;

break;

case "zh":

locale = Locale.SIMPLIFIED_CHINESE;

break;

default:

locale = Locale.getDefault();

break;

}

configuration.setLocale(locale);

return context.createConfigurationContext(configuration);

}

private static void applyLanguage(Context context, String language) {

//设置语言类型

Resources resources = context.getResources();

Configuration configuration = resources.getConfiguration();

DisplayMetrics displayMetrics = resources.getDisplayMetrics();

Locale locale = null;

switch (language) {

case "en":

locale = Locale.ENGLISH;

break;

case "zh":

locale = Locale.SIMPLIFIED_CHINESE;

break;

default:

locale = Locale.getDefault();

break;

}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

// apply locale

configuration.setLocale(locale);

} else {

// updateConfiguration

configuration.locale = locale;

DisplayMetrics dm = resources.getDisplayMetrics();

resources.updateConfiguration(configuration, dm);

}

}

public static Context updateLanguage(Context context) {

String curLanguage = getString(context, Constant.LANGUAGE);

if (null == curLanguage || TextUtils.isEmpty(curLanguage)) {

curLanguage = Constant.LANGUAGE_ZH;

}

return selectLanguage(context, curLanguage);

}

public static boolean switchLanguage(Context context, String value) {

String curLanguage = getString(context, Constant.LANGUAGE);

if (value.equals(curLanguage)) {

return false;

}

if (null == curLanguage || TextUtils.isEmpty(curLanguage)) {

putString(context, Constant.LANGUAGE, Constant.LANGUAGE_EN);

} else {

if (curLanguage.equals(Constant.LANGUAGE_EN)) {

putString(context, Constant.LANGUAGE, Constant.LANGUAGE_ZH);

} else {

putString(context, Constant.LANGUAGE, Constant.LANGUAGE_EN);

}

}

selectLanguage(context, getString(context, Constant.LANGUAGE));

return true;

}

再android7之前,可以直接使用resources.updateConfiguration(configuration, dm);完成语言的切换,但是之后我们需要重新替换Context,把Context替换成设置了指定语言的Context对象,我们可以采取以下方案,context.createConfigurationContext(configuration);

最后需要注意的是,在切换语言的地方需要调用首先调用switchLanguage,然后调用activity的recreate方法重新构造activity(当然,如果不怕麻烦,也可以先finish,然后start当前 ),这个操作最好是放在baseActvitiy中,这样不需要重启应用也能完成语言的切换。

android 切换语言重启应用程序,不重启应用,android APP内部国际化相关推荐

  1. android 切换语言重启应用程序,Android 切换系统语言后,重启App

    package com.barry.common.util; import android.app.Activity; import android.content.Intent; import an ...

  2. android 切换语言重启应用程序,Android 多语言切换无需重启APP的方式

    简述 当APP需要给提供多种语音供用户使用的时候,作为开发者的我们自然要涉及到多语言切换的开发,希望我提供的方式能给需要的小伙伴们一点思路,老规矩先上图. 效果如下,可能看起来会比较卡(不知道为啥黑屏 ...

  3. Android切换语言程序闪退及无效果

    情景1.做了国际化,手动在手机设置修改,此时应用在后台 因为4.2中,app配置了configChanges locale属性后,当app处于后台,并没有finish时,如果改变语言,并不会在resu ...

  4. Android切换语言

    1:各国语言的string values 2:在功能清单文件中对要进行切换acitivity 进行配置android:configChanges="locale" 1 public ...

  5. android 切换语言 广播,Android App 应用内多语言切换

    App用户根据自己的语言喜好,设置app语言.语言设置只针对本app,并在下次启动应用时保留前一次启动设置. 切换语言代码: sharePreferences存入设置语言: Sharencesshar ...

  6. java程序自动重启_java程序自动重启

    java写的cs程序,要求设置一个时间,让程序自动重启. 思路,java代码写一个定时器,每隔一秒判断是否重启,若符合条件,则创建一个新的线程,线程调用一个重启的批处理,重启批处理先停止5分钟,接着在 ...

  7. Android 切换语言输入法也随之改变问题

    问题:设置默认输入法为第三方输入法,切换语言后输入法变为其他输入法 原因(Android 11): frameworks/base/services/core/java/com/android/ser ...

  8. android切换账户功能,安卓9系统开启多用户 android 9支持多用户切换吗?

    android 9支持多用户切换吗? 消息说是支持的呢 Android中的APP如何实现多帐号切换? 这个并不难,你可以同时在服务器的数据库中关联一个主键下的多个账户,每一个账户都有唯一的主键,用主键 ...

  9. 怎么重启php程序,php重启

    作者:陈永鹏 邮箱:chen.yong.peng@foxmail.com 转载请注明作者陈永鹏CSDN博客地址:http://blog.csdn.net/chenyoper php 5.3.3 以后的 ...

最新文章

  1. 找到指定的新类型字符
  2. SQL Server 装载 msxmlsql.dll 失败的解决办法
  3. CodeChef - NWAYS 组合数 朱世杰恒等式
  4. C#网络编程(异步传输字符串) - Part.3[转自JimmyZhang博客]
  5. 利用Vulnhub复现漏洞 - JBoss JMXInvokerServlet 反序列化漏洞
  6. Cocos2d-x游戏开发之lua编辑器 Sublime 搭建,集成cocos2dLuaApi和自有类
  7. Change Jenkins time zone
  8. 夏季外出旅游,有哪些方面需要注意?
  9. spark算子_Spark算子总结
  10. orion sam mysql_JAVA/JSP学习系列之四(Orion App Server的安装)_MySQL
  11. VisualStudio2005英文版被SQL2005简体中文版汉化
  12. 循环在c语言中的表示什么作用,《C语言中的for循环》教案
  13. poj1456(贪心+并查集)
  14. 美图秀秀5 android,美图秀秀Android版v1.4.5上线 优化拼图排版秀北爱
  15. 什么是CTI?呼叫中心系统CTI技术的应用
  16. 资源 | 11个免费矢量免抠素材网站
  17. 震坤行:以成就客户为导向,用专业打造数字化供应链采购流程
  18. 网络编程基础知识概括帮助你了解架框组成客户端服务端架构
  19. 干货|FOF资产配置方案全解析
  20. 《Think Python》练习 4-1:本章示例代码栈图、停止点偏离思考

热门文章

  1. jspm 馨悦养生馆管理系统毕业设计(附源码、运行环境)
  2. 图解数据库多表查询(多表联查)的几种方式
  3. 再谈进程—从入门到出家
  4. 【莫烦Python】Matplotlib Python 画图教程 figure图像
  5. Pandas 复合索引
  6. SonicWall Secure Mobile Access REC漏洞分析
  7. Linux 批量清除文件内容而不删除文件
  8. 云计算1+X平台运维与开发认证能(初级)选择题
  9. 热血江湖最新服务器,《热血江湖》2020年7月9日部分服务器数据互通公告
  10. ParameterDirection.ReturnValue例子