无法使用 window 经理屏幕更新 android 中的日夜模式

Unable to update the day and night modes in android with window manager screens

我使用 WindowManager 显示一种布局。如果我尝试更改夜间或白天模式,它不会产生影响。我的要求是,如果我单击 window 经理视图,它应该更改白天模式,反之亦然

 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
 var view = layoutInflater.inflate( R.layout.child_layout,null)
 windowManager.addView(view,params)

我也有这个问题(使用 InputMethodService 膨胀键盘视图)。我不知道是否有更好的方法来修复它,但这是我的解决方法:

我在 DayNight 主题旁边创建了一个明确的白天主题和夜晚主题。我在每一个中使用了几乎相同的属性,但是子类化了不同的主题(对于默认主题,我的 parentTheme.AppCompat.DayNight.DarkActionBar,所以对于其他两个,我使用 Theme.AppCompat.Light.DarkActionBar 作为浅色主题和 Theme.AppCompat 为深色主题)。我还将 values-night 中的所有样式转换为主题可以设置的属性,因此我的 DayNight 主题的暗模式和亮模式与我创建的其他两个相同。

然后我根据我的主题设置使用 ContextThemeWrapper 主题来膨胀视图:

val themeSetting = getStringPref(R.string.themeSettingKey)
val themeId = if (themeSetting == "MODE_NIGHT_NO") {
    R.style.AppThemeLight
} else if (themeSetting == "MODE_NIGHT_YES") {
    R.style.AppThemeDark
} else {  // MODE_NIGHT_FOLLOW_SYSTEM
    R.style.AppTheme
}
val wrapper = ContextThemeWrapper(context, themeId)
LayoutInflater.from(wrapper).inflate(...)

不幸的是,这意味着只有在布局膨胀时才会设置主题。如果主题设置在视图仍然打开时以某种方式更改,则主题不会更新。 (如果设置为MODE_NIGHT_FOLLOW_SYSTEM,仍会动态调整为系统的主题设置)。

由于我使用的是 InputMethodService,因此我添加了此方法以在显示键盘视图时重新启动它:(根据我的测试,这不会对性能产生明显影响)

override fun onStartInputView(info: EditorInfo, restarting: Boolean) {
    setInputView(onCreateInputView())
}

对于 WindowManager,您可能希望以某种方式重新启动 window。 (如,销毁整个 window 并重新膨胀视图)。如果那不可行,我不知道该怎么做。我在这个问题上卡了两天。