Android篇——升级到androidx.appcompat.app.AppCompatActivity后,切换语言无效的解决办法。

有的同学提出,最近新写一个项目时,使用原来的语言切换工具类,却出现APP切换语言无效的问题,分析后发现是因为新项目使用了androidx的AppCompatActivity,而语言切换的代码却没有更新。

分析原因:

传统的切换语言方法都是重写attachBaseContext(Context newBase)方法,修改newBase的configuration,然后super.attachBaseContext(newBase);应用修改后的语言环境。

但是当升级androidx后,activity继承新的AppCompatActivity,语言环境不再由attachBaseContext得到的Context对象去处理,而是新的AppCompatActivity额外套的一层ContextThemeWrapper负责(下面代码中的wrappedContext对象),(有兴趣的同学可以去阅读AppCompatActivity的源码)。我们需要将语言变更设置给wrappedContext,再super.attachBaseContext(wrappedContext);  这样就可以正常切换语言了。

解决办法:(在使用androidx的情况下)

@Override
protected void attachBaseContext(Context newBase) {
    Resources resources = newBase.getResources();
    Configuration configuration = resources.getConfiguration();
    int language = xxx(); //你要设置的语言,我这里举例是3种,0英文,1繁体中文,2简体中文
    Locale targetLocale = language == 0 ? Locale.US : language == 1 ? Locale.TRADITIONAL_CHINESE : Locale.SIMPLIFIED_CHINESE;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        LocaleList localeList = new LocaleList(targetLocale);
        LocaleList.setDefault(localeList);
        configuration.setLocales(localeList);
    } else {
        configuration.setLocale(targetLocale);
    }
    Context targetContext = newBase.createConfigurationContext(configuration);
    final ContextThemeWrapper wrappedContext = new ContextThemeWrapper(targetContext, R.style.Theme_AppCompat_Empty) {
        @Override
        public void applyOverrideConfiguration(Configuration overrideConfiguration) {
            if (overrideConfiguration != null) {
                overrideConfiguration.setTo(configuration);
            }
            super.applyOverrideConfiguration(overrideConfiguration);
        }
    };
    super.attachBaseContext(wrappedContext);
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: androidx.appcompat.app.AppCompatActivity是一个Android开发中的类,它是一个支持库中的Activity基类,用于在旧版本的Android系统上提供现代化的用户界面和功能。它提供了许多与Material Design相关的功能,如Toolbar、NavigationView、Snackbar等,可以帮助开发者更轻松地实现现代化的应用程序。 ### 回答2: androidx.appcompat.app.AppCompatActivityAndroid Jetpack库中的一个类,它是继承自android.app.Activity的一个基础活动类。这个类是为了实现应用程序与操作系统之间的交互,并提供了许多有用的功能和资源。 首先,androidx.appcompat.app.AppCompatActivity提供了与应用程序主题相关的特性。它允许开发者在不更改Android操作系统主题的情况下,对应用程序的外观和样式进行自定义。这样可以使应用程序在不同的Android设备上具有一致的外观,并为用户提供更好的用户体验。 其次,androidx.appcompat.app.AppCompatActivity还提供了继承自android.app.Activity的许多常用方法和生命周期回调。这些方法和回调可以帮助开发者管理应用程序的状态和生命周期,例如创建、启动、暂停、恢复和销毁等。通过这些方法和回调,开发者可以更好地控制应用程序的行为,提供更好的用户体验。 此外,androidx.appcompat.app.AppCompatActivity还提供了许多与ActionBar和Toolbar相关的功能。ActionBar是一个位于应用程序顶部的导航栏,用于显示应用程序的标题、图标和菜单等。而Toolbar是一个更加灵活和可定制的导航栏,用于替代ActionBar,使开发者能够自定义应用程序的导航栏样式和功能。 总之,androidx.appcompat.app.AppCompatActivity是一个用于开发Android应用程序的重要基础类。它提供了许多与应用程序外观、功能和交互相关的特性,帮助开发者构建出更好的Android应用程序。通过使用这个类,开发者可以更好地管理和控制应用程序的状态和生命周期,并提供一致和灵活的用户界面。 ### 回答3: androidx.appcompat.app.AppCompatActivityAndroid Jetpack 中的一个类,是支持向后兼容的 Android Activity 类。它是基于 AppCompat 库开发的,旨在提供更广泛的设备兼容性和统一的用户界面体验。 AppCompatActivity 提供了与传统的 Activity 类相同的功能,并添加了一些新的特性。它使得开发者可以在较旧版本的 Android 平台上使用最新的 Material Design 组件。此外,它还允许将新的特性引入到较旧版本中,以获得新的用户界面效果。 通过引入 androidx.appcompat.app.AppCompatActivity,开发者可以使用 Toolbar 替代传统的 ActionBar,使得应用的工具栏定制更为灵活。还可以使用统一的颜色和样式来确保应用在各个设备上显示一致。 此外,AppCompatActivity 还支持向后兼容的弹出菜单和对话框,使得应用在各个 Android 版本上都能有相似的用户体验。 总之,androidx.appcompat.app.AppCompatActivity 是用于提供设备兼容性和统一用户界面体验的 Android Jetpack 组件之一。通过使用这个类,开发者可以在较旧版本的 Android 平台上使用最新的 Material Design 组件,并获得一致的用户界面效果。它为开发者提供了更灵活的工具栏定制和向后兼容的弹出菜单和对话框功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值