赞
踩
Android 应用内语言切换如果采用重建Activity方式的话,会有切换Activity效果(finish-startActivity),在视觉上体验效果不理想,而采用recreate,虽然也是销毁再重建的过程,Activity的生命周期变化是先onPause()–>onStop()–>onDestory()(销毁),然后onCreate()–>onStart()–>onResume()(重建),但不会有切换页面
1 根据语言设置地区
- public static Locale getLocaleByLanguage(String language) {
- Locale locale = Locale.SIMPLIFIED_CHINESE;
- if (language.equals(LanguageType.CHINESE.getLanguage())) {
- locale = Locale.SIMPLIFIED_CHINESE;
- } else if (language.equals(LanguageType.ENGLISH.getLanguage())) {
- locale = Locale.ENGLISH;
- }
- Log.d("TAG", "getLocaleByLanguage: " + locale.getDisplayName());
- return locale;
- }
2 切换语言
- fun setConfiguration(context: Context) {
- var language = Global.getLanguage()
- if (!Global.isSetLanguage()) {
- if (LanguageUtils.isZhText()) {
- if (language != Constant.LANGUAGE_ZH) {
- //app未启动的时候, 系统语言切换,先按系统语言切换,之后再提交后天系统语言已经切换
- language = Constant.LANGUAGE_ZH
- }
- } else {
- if (language != Constant.LANGUAGE_EN) {
- //app未启动的时候, 系统语言切换,先按系统语言切换,之后再提交后天系统语言已经切换
- language = Constant.LANGUAGE_EN
- }
- }
- }
- val locale: Locale = getLocaleByLanguage(language)
- val configuration: Configuration = context.resources.configuration
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
- configuration.setLocale(locale)
- } else {
- configuration.locale = locale
- }
- val resources: Resources = context.resources
- val dm: DisplayMetrics = resources.displayMetrics
- resources.updateConfiguration(configuration, dm) //语言更换生效的代码!
- }

3 调用切换语言,在点击切换处,设置想要切换的语言
- var sysLanguage = Constant.SERVER_LANGUAGE_CN
- if (language == LANGUAGE_EN){
- sysLanguage = Constant.SERVER_LANGUAGE_EN
- }
- Global.setLanguage(language)
- LanguageUtils.changeAppLanguage(ActivityUtil.getTopActivity(), language)
-
- //整个App上下文语言修改
- App.setConfiguration(App.self)
- ActivityUtil.allActivityRecreate()
注:系统切换语言的话,应用会自动重新刷新页面不用调用recreate。只要在进行设置
//整个App上下文语言修改
App.setConfiguration(App.self)
注:在Activity 启动的Oncreate需要调用setConfiguration(),使页面上下文语言修改
所有的getString(id) 需要使用Activity否则获取的仍然是根据系统获取文本
SVID_20230504_112008_1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。