在不重启应用的情况下丝滑实现原生语言切换和灰色主题模式切换
一、背景描述
目前大部分的app在实现灰色模式和语言切换的时候都需要重新启动应用或者重新打开这个Activity,这让我感觉体验不好,所以尝试用的新的方法来实现这2个功能,达到丝滑的效果
效果图

二、原生语言切换
首先要说的是不用重启的核心的API:
ActivityCompat.recreate(activity):可以丝滑的达到重建,不过这个API使用条件是Android≥ 26
接下来说明一下具体的实现过程和一些核心的API
/*修改应用内语言设置*/
fun changeLanguage(context: Context, newLocale: Locale = Locale.ROOT) {
setAppLanguage(context, newLocale)
saveLanguageSetting(context, newLocale)
ActivityCompat.recreate(context.asActivity)
}
/*设置语言*/
private fun setAppLanguage(context: Context, locale: Locale) {
val resources = context.resources
val metrics = resources.displayMetrics
val configuration = resources.configuration
//Android 7.0以上的方法
if (VERSION.SDK_INT >= 24) {
configuration.setLocale(locale)
configuration.setLocales(LocaleList(locale))
context.createConfigurationContext(configuration)
//实测,updateConfiguration这个方法虽然很多博主说是版本不适用
//但是我的生产环境androidX+Android Q环境下,必

文章介绍了一种方法,使得在不重启应用的情况下,能够平滑地切换Android应用的原生语言和灰色主题模式。通过使用ActivityCompat.recreate()API和针对不同Android版本的配置更新,实现了语言切换,同时动态修改Activity的装饰视图以切换灰色主题,确保了良好的用户体验。
最低0.47元/天 解锁文章
335





