android 切换语言重启应用程序,不重启应用,android APP内部国际化
当前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内部国际化相关推荐
- android 切换语言重启应用程序,Android 切换系统语言后,重启App
package com.barry.common.util; import android.app.Activity; import android.content.Intent; import an ...
- android 切换语言重启应用程序,Android 多语言切换无需重启APP的方式
简述 当APP需要给提供多种语音供用户使用的时候,作为开发者的我们自然要涉及到多语言切换的开发,希望我提供的方式能给需要的小伙伴们一点思路,老规矩先上图. 效果如下,可能看起来会比较卡(不知道为啥黑屏 ...
- Android切换语言程序闪退及无效果
情景1.做了国际化,手动在手机设置修改,此时应用在后台 因为4.2中,app配置了configChanges locale属性后,当app处于后台,并没有finish时,如果改变语言,并不会在resu ...
- Android切换语言
1:各国语言的string values 2:在功能清单文件中对要进行切换acitivity 进行配置android:configChanges="locale" 1 public ...
- android 切换语言 广播,Android App 应用内多语言切换
App用户根据自己的语言喜好,设置app语言.语言设置只针对本app,并在下次启动应用时保留前一次启动设置. 切换语言代码: sharePreferences存入设置语言: Sharencesshar ...
- java程序自动重启_java程序自动重启
java写的cs程序,要求设置一个时间,让程序自动重启. 思路,java代码写一个定时器,每隔一秒判断是否重启,若符合条件,则创建一个新的线程,线程调用一个重启的批处理,重启批处理先停止5分钟,接着在 ...
- Android 切换语言输入法也随之改变问题
问题:设置默认输入法为第三方输入法,切换语言后输入法变为其他输入法 原因(Android 11): frameworks/base/services/core/java/com/android/ser ...
- android切换账户功能,安卓9系统开启多用户 android 9支持多用户切换吗?
android 9支持多用户切换吗? 消息说是支持的呢 Android中的APP如何实现多帐号切换? 这个并不难,你可以同时在服务器的数据库中关联一个主键下的多个账户,每一个账户都有唯一的主键,用主键 ...
- 怎么重启php程序,php重启
作者:陈永鹏 邮箱:chen.yong.peng@foxmail.com 转载请注明作者陈永鹏CSDN博客地址:http://blog.csdn.net/chenyoper php 5.3.3 以后的 ...
最新文章
- 找到指定的新类型字符
- SQL Server 装载 msxmlsql.dll 失败的解决办法
- CodeChef - NWAYS 组合数 朱世杰恒等式
- C#网络编程(异步传输字符串) - Part.3[转自JimmyZhang博客]
- 利用Vulnhub复现漏洞 - JBoss JMXInvokerServlet 反序列化漏洞
- Cocos2d-x游戏开发之lua编辑器 Sublime 搭建,集成cocos2dLuaApi和自有类
- Change Jenkins time zone
- 夏季外出旅游,有哪些方面需要注意?
- spark算子_Spark算子总结
- orion sam mysql_JAVA/JSP学习系列之四(Orion App Server的安装)_MySQL
- VisualStudio2005英文版被SQL2005简体中文版汉化
- 循环在c语言中的表示什么作用,《C语言中的for循环》教案
- poj1456(贪心+并查集)
- 美图秀秀5 android,美图秀秀Android版v1.4.5上线 优化拼图排版秀北爱
- 什么是CTI?呼叫中心系统CTI技术的应用
- 资源 | 11个免费矢量免抠素材网站
- 震坤行:以成就客户为导向,用专业打造数字化供应链采购流程
- 网络编程基础知识概括帮助你了解架框组成客户端服务端架构
- 干货|FOF资产配置方案全解析
- 《Think Python》练习 4-1:本章示例代码栈图、停止点偏离思考