网站建设合同书范本,可以免费做推广的网站,电子商务网站建设的技术综述论文,徐州建设工程审图中心网站Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC
#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧#xff0c;以及各种资源分…Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC
关于作者 专注于Android/Unity和各种游戏开发技巧以及各种资源分享网站、工具、素材、源码、游戏等 有什么需要欢迎底部卡片私我交流让学习不再孤单。 实践过程
最近公司开始做多语言版本由于之前没有做过所以在网上搜寻了一番这方面的资料最后经过实践、总结写下了这篇文章。源码Github
多语言的切换功能
首先实现多语言的切换功能参考Android App 多语言切换。
1.在res资源文件目录下添加不同语言的values,如图
添加多语言.png
2.通过修改Configuration中的locale来实现app语言的切换具体代码如下
Resources resources context.getResources();
DisplayMetrics dm resources.getDisplayMetrics();
Configuration config resources.getConfiguration();
resources.updateConfiguration(config, dm);3.根据本地缓存的type获取对应的locale,其中7.0以上的系统需要另做处理具体代码如下
Locale locale;
// 应用用户选择语言
switch (type) {
case 0:
//由于API仅支持7.0需要判断否则程序会crash(解决7.0以上系统不能跟随系统语言问题)
if (Build.VERSION.SDK_INT Build.VERSION_CODES.N) {
LocaleList localeList LocaleList.getDefault();
locale localeList.get(localeList.size() - 1);
} else {
locale Locale.getDefault();
}
break;
、、、
default:
locale thLocale;
break;
}4.在AppApplication中初始化时设置本地语言用于每次启动APP后切换到本地缓存的语言
// 设置本地化语言
I18NUtils.setLocale(this);5.在BaseActivity的OnCreate()方法中设置语言用于处理每次切换系统语言后app语言会跟随系统变化的问题
if(!I18NUtils.isSameLanguage(this)) {I18NUtils.setLocale(this);I18NUtils.toRestartMainActvity(this);
}6.手动切换语言时先更新locale配置然后通过跳转到主Activity实现。Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK通过清理掉进程中的所有activity重新配置。
Intent intent new Intent(activity, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
activity.startActivity(intent);
// 杀掉进程如果是跨进程则杀掉当前进程
// android.os.Process.killProcess(android.os.Process.myPid());
// System.exit(0);解决7.0以上系统存在的兼容问题
这个问题的解决参考了Android 7.0 语言设置爬坑。由于Android7.0以上Configuration将通过LocaleList来管理语言并且系统切换语言后系统默认语言可能并不在LocaleList顶部官方API说明
进测试得出结论如果APP手动选择过语言则系统语言是第二个否则是第一个。获取当前系统locale,代码如下
//由于API仅支持7.0需要判断否则程序会crash(解决7.0以上系统不能跟随系统语言问题)
if (Build.VERSION.SDK_INT Build.VERSION_CODES.N) {LocaleList localeList LocaleList.getDefault();
int spType getLanguageType(AppApplication.getAppContext());
// 如果app已选择不跟随系统语言则取第二个数据为系统默认语言
if(spType ! 0 localeList.size() 1) {locale localeList.get(1);} else {locale localeList.get(0);}
} else {
locale Locale.getDefault();
}7.0以上系统WebView所在Activity没有跟随语言切换问题
更新日期2017年12月14日15:56:47
在后续的测试发现在有webView的activitiy中语言并没有随着语言进行切换。参考多语言切换失效的问题以及stackoverflow后通过在切换语言之前执行new WebView(context).destroy(解决。代码
// 解决webview所在的activity语言没有切换问题
new WebView(context).destroy();
// 切换语言
Resources resources context.getResources();
DisplayMetrics dm resources.getDisplayMetrics();
Configuration config resources.getConfiguration();
config.locale getLocaleByType(type);
LogUtils.logd(setLocale: config.locale.toString());
resources.updateConfiguration(config, dm);总结
自此多语言切换的问题已经完美解决了。经测试完全兼容7.0以上系统的多语言切换。
其他 作者小空和小芝中的小空 转载说明-务必注明来源https://zhima.blog.csdn.net/ 这位道友请留步☁️我观你气度不凡谈吐间隐隐有王者霸气日后定有一番大作为旁边有点赞收藏今日传你点了吧未来你成功☀️我分文不取若不成功⚡️也好回来找我。 温馨提示点击下方卡片获取更多意想不到的资源。