Android应用内语言切换实现
来源:互联网 发布:hex editor mac 编辑:程序博客网 时间:2024/05/19 17:58
时间因公司业务需要,应用里面有个设置页面,其中有一项“语言切换”功能,就是在使用APP的过程中,动态的去切换APP的语言,具体参照微信设置页面。起先想来是很简单的事情嘛,不就是个简单的资源国际化嘛,strings.xml资源文件一整还不给OK?真正动起手来就真不是这么一回事了,国际化是没问题,但是怎样能更改所有页面的文字资源呢,这是一个问题。下面介绍下网上找的几个方案。
一、API欺骗
烧制到手机中的android.jar包含了Android所需的各种类与方法;而供开发者使用的android.jar只是其中的一部分。API欺骗是指在应用中去模拟未公开的类和方法让应用编译通过并生成APK,然而在应用实际运行中调用的却仍是烧制到手机中真实的android.jar。
二、使用Java反射机制
IActivityManager与ActivityManagerNative都是非公开类,使用Java反射去调用其中的方法。
但是这个弊端是显而易见的,上述两种方法都是去更改系统的语言的类型,功能和你去设置页面去设置语言类型的效果一样。发现对当前系统设置了新的Locale后,不单自己的应用语系改变了,系统所有的应用语系都改变了。这肯定是不合理的。或许你会说,在退出app的时候,大不了再把语言给改回来呗。可是在Android里面,杀死APP的原因多种多样,有内存杀,有用户强杀,有滑动侧滑杀,你又能如何判断APP是何时被Kill的呢。下面介绍下我的解决方案,实现的效果还是不错的。依旧Github代码地址在最下方,有兴趣的同学可以去下载看下。
第一步、使用Android开放的api更改Configuration,同时把语言类型保存下来
第二步、Destroy当前页面,重新绘制才能更改语言类型
如果你的页面不是首页,你调用上述代码只会更新当前页面,压在栈中的Activity依然不会更新界面。比如微信设置语言成功后,会自动跳转到首页,当然首页的内容也是更新后的,它的实现方式也很简单,与我们上面写的大同小异。就是监听设置成功后,destroy所有存在的页面,再跳转到首页。这时你的app就能满足了上面的需求了,可是别急还有第三步。
第三步、只要你的应用不彻底从Dalvik或者ART中彻底移除,上述都没问题。但是如果重新开机,或者强制杀掉应用,再次启动,就恢复到以前的语言类型了。
这会我们就用到第一步中保存的语言的类型了,在所有页面的基类BaseActivity中,每次都调用下语言设置的方法,这样就能把页面给强制设置成业务需求的语言类型了。OK,这个问题就完满解决了,要为你的APP添加这个功能的话,对代码的改动是非常小的。
- Android应用内语言切换实现
- Android应用内语言切换实现
- Android应用内语言切换实现
- Android应用内语言切换实现
- Android应用内语言切换实现
- android 实现应用内语言切换
- Android 应用内切换语言
- android 应用内切换语言
- android 应用内切换语言
- android 应用内语言切换
- android 应用内切换语言
- android 应用内切换语言
- Android多语言,应用内切换语言
- Android应用内切换应用语言
- Android应用内即时切换语言
- android 2种切换语言方式:应用内切换和随系统而切换 代码实现重启应用
- 应用内切换语言
- 新应用的知识整理-Android studio中应用多语言支持及应用内语言切换的实现
- 管脚号到中断号计算
- 线性表的实现(三)循环链表
- java.lang.UnsupportedClassVersionError: PR/Sort : Unsupported major.minor version 52.0
- XIOI 字符串的周期
- 微信开放平台API开发资料
- Android应用内语言切换实现
- 【tyvj1387】 迷你火车头 DP
- Aspose系列(二)Word增加页眉和页脚
- oracle处理数字函数大全
- 不懂技术的人不要对懂技术的人说这很容易实现
- Java中系统属性Properties介绍
- eclipse调试android源码(system_process)
- FileReader:读取本地图片文件并显示
- 窗体Excel数据导入(第二讲)