可通过Context注册一个监听registerComponentCallbacks来解决;
Context源码如下所示:
Add a new ComponentCallbacks to the base application of the Context, which will be called at the same times as the ComponentCallbacks methods of activities and other components are called. Note that you must be sure to use unregisterComponentCallbacks when appropriate in the future; this will not be removed for you.
After Build.VERSION_CODES.S, Registering the ComponentCallbacks to Context created via createWindowContext(int, Bundle) or createWindowContext(Display, int, Bundle) will receive ComponentCallbacks.onConfigurationChanged(Configuration) from Window Context rather than its base application. It is helpful if you want to handle UI components that associated with the Window Context when the Window Context has configuration changes.
public void registerComponentCallbacks(ComponentCallbacks callback) {
getApplicationContext().registerComponentCallbacks(callback);
}
调用代码片段:
requireContext().registerComponentCallbacks(object :ComponentCallbacks{
override fun onConfigurationChanged(newConfig: Configuration) {
var mode = AppCompatDelegate.getDefaultNightMode()
var text = when (mode) {
AppCompatDelegate.MODE_NIGHT_NO -> "现在是日间模式"
AppCompatDelegate.MODE_NIGHT_YES -> "现在是夜间模式"
else -> "当前模式未匹配"
}
Log.d("test","配置变动了 registerComponentCallbacks --- onConfigurationChanged mode = $mode--- $text ")
}
当作笔记记录一下