Android の WebView で forceDark を適用するのに調査したので、メモとして残します。
WebView で forceDark を使う場面自体少ないかと思いますが、WebView で表示させてるプライバシーポリシーやライセンスの画面を黒くするために調査しました。
Light テーマの場合
Theme.AppCompat.Light
など DayNight テーマを使用していない場合はアプリのテーマに android:forceDarkAllowed="true"
を追加することで WebView を強制的に黒くさせることができます。
この方法の場合はアプリのテーマで強制的に色を黒くさせるため、必要な画面のみ適用させる必要があります。
DayNight テーマの場合
デフォルトではテーマなどの forceDarkAllowed
を参照して黒にするかを切り替えるようになっていますが、 DayNight テーマを使用している場合は forceDarkAllowed
が適用されないため、WebSettings.setForceDark
を使用してコードで指定する必要があります。
webView.apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
settings.forceDark = if (isDarkTheme()) {
WebSettings.FORCE_DARK_ON //強制的に黒くする
} else {
WebSettings.FORCE_DARK_OFF
}
}
}
※ WebSettings.setForceDark
は API 29 以降で使えます。