当前位置:   article > 正文

Android 应用内语言切换不重建Activity,使用recreate_android切换语言刷新页面

android切换语言刷新页面

Android 应用内语言切换如果采用重建Activity方式的话,会有切换Activity效果(finish-startActivity),在视觉上体验效果不理想,而采用recreate,虽然也是销毁再重建的过程,Activity的生命周期变化是先onPause()–>onStop()–>onDestory()(销毁),然后onCreate()–>onStart()–>onResume()(重建),但不会有切换页面

1 根据语言设置地区

  1. public static Locale getLocaleByLanguage(String language) {
  2. Locale locale = Locale.SIMPLIFIED_CHINESE;
  3. if (language.equals(LanguageType.CHINESE.getLanguage())) {
  4. locale = Locale.SIMPLIFIED_CHINESE;
  5. } else if (language.equals(LanguageType.ENGLISH.getLanguage())) {
  6. locale = Locale.ENGLISH;
  7. }
  8. Log.d("TAG", "getLocaleByLanguage: " + locale.getDisplayName());
  9. return locale;
  10. }

2 切换语言

  1. fun setConfiguration(context: Context) {
  2. var language = Global.getLanguage()
  3. if (!Global.isSetLanguage()) {
  4. if (LanguageUtils.isZhText()) {
  5. if (language != Constant.LANGUAGE_ZH) {
  6. //app未启动的时候, 系统语言切换,先按系统语言切换,之后再提交后天系统语言已经切换
  7. language = Constant.LANGUAGE_ZH
  8. }
  9. } else {
  10. if (language != Constant.LANGUAGE_EN) {
  11. //app未启动的时候, 系统语言切换,先按系统语言切换,之后再提交后天系统语言已经切换
  12. language = Constant.LANGUAGE_EN
  13. }
  14. }
  15. }
  16. val locale: Locale = getLocaleByLanguage(language)
  17. val configuration: Configuration = context.resources.configuration
  18. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
  19. configuration.setLocale(locale)
  20. } else {
  21. configuration.locale = locale
  22. }
  23. val resources: Resources = context.resources
  24. val dm: DisplayMetrics = resources.displayMetrics
  25. resources.updateConfiguration(configuration, dm) //语言更换生效的代码!
  26. }

3 调用切换语言,在点击切换处,设置想要切换的语言

  1. var sysLanguage = Constant.SERVER_LANGUAGE_CN
  2. if (language == LANGUAGE_EN){
  3. sysLanguage = Constant.SERVER_LANGUAGE_EN
  4. }
  5. Global.setLanguage(language)
  6. LanguageUtils.changeAppLanguage(ActivityUtil.getTopActivity(), language)
  7. //整个App上下文语言修改
  8. App.setConfiguration(App.self)
  9. ActivityUtil.allActivityRecreate()

注:系统切换语言的话,应用会自动重新刷新页面不用调用recreate。只要在进行设置

 //整个App上下文语言修改
         App.setConfiguration(App.self)

注:在Activity 启动的Oncreate需要调用setConfiguration(),使页面上下文语言修改

所有的getString(id) 需要使用Activity否则获取的仍然是根据系统获取文本

SVID_20230504_112008_1

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/196608
推荐阅读