4

編集:下部に更新

私はアプリケーションでこれを呼び出していますonCreate:AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)

次に、デバイスの設定 (設定 -> ディスプレイ -> ナイト モード (スイッチ: オン/オフ)) に移動し、アプリケーションを再開すると、テーマが適用されません。デバイスの設定でナイトモードをオンまたはオフにしても、テーマは適用されません。

また、ブレークポイントを追加し、デバイスの設定からダークモードがオンになっている場合でも、以下が返されることを確認しましたfalse(注: アプリはダークモードをオフにして起動されました)。

fun isNightMode(app: Application): Boolean {
     return when(app.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
         Configuration.UI_MODE_NIGHT_NO -> false
         Configuration.UI_MODE_NIGHT_YES -> true
         else -> false
     }
 }

デバイス設定からテーマを変更すると、application'sリソースが更新されないようです。

デバッグ目的で、Application クラスの次の関数をオーバーライドします。

override fun onConfigurationChanged(newConfig: Configuration?) {
   super.onConfigurationChanged(newConfig)
} 

そしてそれは呼び出されています。

編集:これが問題を引き起こしているようです。これを Application クラスに持つ:

override fun attachBaseContext(base: Context) {
   val locale = Locale("de", "DE")

   Locale.setDefault(locale)

   val resources = base.resources
   val configuration = Configuration(resources.configuration)

   configuration.setLocale(locale)
   val baseContext = base.createConfigurationContext(configuration)
        
   super.attachBaseContext(baseContext)
}

上記のコードを削除すると、機能します。

4

1 に答える 1