Closed kanshenmekan closed 10 months ago
这个注释是其他含义吗,还是我理解错了,望解答,轮子哥
发现了问题,只要设置为不跟随系统,杀死app重新打开,然后去系统页面设置语言,都不会调用, 是否能考虑用Intent.ACTION_LOCALE_CHANGED,广播来监听系统语言变化
@kanshenmekan 小伙子,经过测试验证,用 Intent.ACTION_LOCALE_CHANGED
确实可以监听到系统语种的变化,目前该问题已经优化,你可以下载上面的 aar 包测试一下。
android13 设置了setApplicationLocales之后,只有再次调用这个方法,设置其他Locale才会调用onConfigurationChanged 应该处理一下 库里面是使用updateConfiguration实现的,不理解为什么要设置这个
@kanshenmekan 小伙子,我没理解你说的《android13 设置了 setApplicationLocales 之后,只有再次调用这个方法,设置其他Locale 才会调用 onConfigurationChanged》 这句话的含义,希望能重新解释一下。
就是setApplicationLocales之后,只有改变这个值才会触发调用onConfigurationChanged,更改系统的语言没有效果,也不会触发onConfigurationChanged。 当设置setApplicationLocales一个空的LocaleList.getEmptyLocaleList(),就恢复跟随系统设置了,更改系统语言也会触发onConfigurationChanged
小伙子,我测试了一下,就算没有调用 LocaleManager.setApplicationLocales
,在 Android 13 的系统设置中,设置系统的语种或者单独设置应用的语种,都是可以触发 onConfigurationChanged
方法回调的,你测试一下看看是不是这样的?
LocaleManager.setApplicationLocales 没有调用默认就是EmptyLocaleList(),就是跟随系统语言,是可以触发onConfigurationChanged方法的,但是只要设置过一次LocaleManager.setApplicationLocales不为EmptyLocaleList,是一直保存的,杀死进程没用,需要卸载重装,就不会触发onConfigurationChanged方法
小伙子,测试了一下,情况如你所说的,目前该问题已经优化,你下载上面 aar 包试试看有没有问题?
我觉得用updateConfiguration 会有一个问题,只能实现app内切换语言,如果在xml 配置了android:localeConfig="@xml/locale_config" ,然后去Settings.ACTION_APP_LOCALE_SETTINGS会不会没效果,我没测试过
因为按照逻辑讲,应用语言页面设置了,会调用onConfigurationChanged,然后对比一下app内部设置的语言,不一样的话就改回app内部设置的语言了,会造成设置无效果
application 里面的onConfigurationChanged 是会改变attachBaseContext的context语种的
我觉得用updateConfiguration 会有一个问题,只能实现app内切换语言,如果在xml 配置了android:localeConfig="@xml/locale_config" ,然后去Settings.ACTION_APP_LOCALE_SETTINGS会不会没效果,我没测试过
小伙子,我测试了,这样会触发 onConfigurationChanged
方法,间接触发 updateConfiguration 方法,这样的逻辑其实是不对的,要加上一个前置的条件,必须要指定某个语种的情况下,才去触发 updateConfiguration 方法。
那种情况试了没,首先app内部设置一个语言,不要跟随系统。然后去单个应用语言设置页面,选择一个不同的语言,看会不会生效
小伙子,你知道在 Activity 上面调用 getSystemService(LocaleManager.class).setApplicationLocales
会是什么效果吗?
Ps:应用初始化的时候调用没事(不会闪屏),但是在 Activity 已创建的情况下调用就有问题(会出现闪屏)
视频我放在上面了,你可以看一下,我的想法是不要让开发者适配 locales_config.xml
,也不要在 App 设置中单独给应用设置语种,因为谷歌在 Android 13 把这个东西做得很烂,如果要达成你刚刚说的效果,那么用户在切换语种的时候,我必须要调用 getSystemService(LocaleManager.class).setApplicationLocales
方法,否则你从设置中的应用语种设置界面看到的还是旧的语种。
现在还会有一个问题,在app内部设置一个语言之后,然后在系统页面去设置单个app语言页面会没有效果。如果不要适配 locales_config.xml,可以不使用任何android13的api
@kanshenmekan 是的,小伙子,只能这样做了
@kanshenmekan 小伙子,框架的远程依赖更新了,你可以更新一下。
后面框架使用有任何问题欢迎再反馈给我
问题描述【必填】
我看库里面有注释
// 需要注意的是:Android 13 上面改变了系统的语种也不会回调 onConfigurationChanged 方法 // 所以就需要借助一些特殊手段来获取,通过查阅官方文档,发现没有什么好的办法监听到,只能通过轮询的方式
我使用demo,在android13的手机上面测试,去系统页面切换系统语言,是会调用这个方法的,包括横竖屏切换 只加了这个Log
框架文档是否提及了该问题【必答】
否
是否已经查阅框架文档但还未能解决的【必答】
是
issue 列表中是否有人曾提过类似的问题【必答】
否
是否已经搜索过了 issue 列表但还未能解决的【必答】
是