美文网首页
2022-06-27 Blankj-AndroidUtilCod

2022-06-27 Blankj-AndroidUtilCod

作者: 兣甅 | 来源:发表于2022-06-27 04:06 被阅读0次

1.当APP第一次打开时,如果默认语言和手机语言不一致,则需要先在Application的onCreate中调用使用语言

  @Override
  public void onCreate() {
      super.onCreate();
      ...
      //设置APP语言
      if (LanguageUtils.getAppliedLanguage() == null) {//如果一次都没有设置,则需要默认设置一次,以便Activity中生效
        //这里面的主要作用是保障UtilsActivityLifecycleImpl的LanguageUtils方法生效
        //LanguageUtils.applyLanguage(locale);
        //由于上面这个方法会造成闪屏,所以将内部方法提取为下面的写法
        SPUtils.getInstance("Utils").put("KEY_LOCALE", locale.getLanguage() + "$" + locale.getCountry(), true);
      }
      ...
}

2.调用LanguageUtils.updateAppContextLanguage更新Application的语言

  @Override
  public void onCreate() {
      super.onCreate();
      ...
      //修改Application的语言
      LanguageUtils.updateAppContextLanguage(locale, null);
      ...
}

3.修复StringUtils获取string的语言

  @Override
  public void onCreate() {
      super.onCreate();
      ...
      //修复StringUtils获取string的语言
      LanguageUtil.applyLanguage(this, this.getResources(), locale);
      ...

4.由于LanguageUtils中的语言更新并没有更新到Resources.getSystem()中的语言,所以以防万一,我们再更新一下Resources.getSystem()中的语言,代码可以参考LanguageUtils中的更新方法

  @Override
  public void onCreate() {
    super.onCreate();
    ...
    if (ProcessUtils.isMainProcess()) {
      //修复WebView导致的语言切换失效,要放到设置语言前
      new WebView(this).destroy();
      //当前语言
      Locale locale = LanguageUtil.getCurrentLanguageLocale();
      //设置APP语言
      if (LanguageUtils.getAppliedLanguage() == null) {//如果一次都没有设置,则需要默认设置一次,以便Activity中生效
        //这里面的主要作用是保障UtilsActivityLifecycleImpl的LanguageUtils方法生效
        //LanguageUtils.applyLanguage(locale);
        //由于上面这个方法会造成闪屏,所以将内部方法提取为下面的写法
        SPUtils.getInstance("Utils").put("KEY_LOCALE", locale.getLanguage() + "$" + locale.getCountry(), true);
      }
      //修改Application的语言
      LanguageUtils.updateAppContextLanguage(locale, null);
      //修改Resources.getSystem()的语言
      LanguageUtil.applyLanguage(this, Resources.getSystem(), locale);
      //修复StringUtils获取string的语言
      LanguageUtil.applyLanguage(this, this.getResources(), locale);
      ...
    }
  }

部分调用方法:

  //获取当前语言
  public static Locale getCurrentLanguageLocale() {
    Locale locale = LanguageUtils.getAppliedLanguage();
    if (locale == null) {
      return Locale.US;
    } else {
      return locale;
    }
  }

  //设置当前语言
  public static void applyLanguage(Context context, Resources resources, Locale locale) {
    Configuration config = resources.getConfiguration();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
      LocaleList localeList = new LocaleList(locale);
      config.setLocales(localeList);
    } else {
      config.setLocale(locale);
    }
    context.createConfigurationContext(config);
  }

相关文章

  • 2022-06-27 Blankj-AndroidUtilCod

    1.当APP第一次打开时,如果默认语言和手机语言不一致,则需要先在Application的onCreate中调用使...

  • 2022-07-01 因子论实盘记录

    一、交易记录 2022-06-27 22.80 元买入 100 股太极集团。2022-06-29 4.446 元卖...

  • 戒定慧·《感恩日志》重启第45天

    2022-06-27(周一)五月廿九 戒定慧·《感恩日志》重启第45天 【05:57】 01、感恩:“佛教”~“佛...

  • 戒定慧·《感恩日志》重启第46天

    2022-06-27(周二)五月三十 戒定慧·《感恩日志》重启第46天 【21:46】 *感恩今日闭关体验! :0...

  • 0239读书|幸福的假设(完结篇)

    2022-06-27 北京 雾 小雨 固定时间进行冥想练习。读书写作运动 读书践行 《被讨厌的勇气》读完了。《象与...

  • 叙事第10课:叙事实践的督导

    中原焦点团队 坚持分享1442天 2022-06-27 一、咨询督导的定义 1.协助受督导者(助人者)觉察与专...

  • 2022-06-27

    NEJM | 循环肿瘤DNA可识别结肠癌的治疗反应 原创图灵基因图灵基因2022-06-27 09:00发表于江苏...

  • 2022-06-27

    Nature | 破译免疫肽组揭示新的肿瘤抗原 原创存在一棵树图灵基因2022-06-27 09:00发表于江苏 ...

  • 0238读书|《象与骑象人》IV追寻人生的意义

    2022-06-27 北京 这是昨天的读书打卡。新的一周开始了,把周计划列好,做复盘。 读书践行 《象与骑象人》...

  • 28头晕

    2022-06-27星期一 晴 每天我到了下午4点多,头就开始范晕,不知道是因为公司污浊的空气还是因为我自己身体的...

网友评论

      本文标题:2022-06-27 Blankj-AndroidUtilCod

      本文链接:https://www.haomeiwen.com/subject/vwlnvrtx.html