Android 10 のリリースにより、ダーク モードが切り替えられると、いくつかのウィジェット (Gmail、Google ニュース、Samsung メール) のテーマが更新されるようになりました。私はその振る舞いを再現しようとしています。AppWidgetProvider と RemoteViewsFactory を備えたリストビュー ウィジェットがあります。ただし、ダーク モードが切り替えられると、ListView アイテムはダーク テーマに切り替わりますが、レイアウト自体には切り替わりません。
ダークモードオフ:
ダークモードオン:
私のコードでは、AppWidgetProvider の OnUpdate() メソッドでレイアウトを設定しています。
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager?,
appWidgetIds: IntArray?
) {
Log.d(TAG, "Updating Transaction Widget")
GlobalScope.launch(Dispatchers.IO ) {
updateTransactionTable(context)
for (i in appWidgetIds!!.indices) {
val layout: RemoteViews = buildLayout(context, appWidgetIds[i])
appWidgetManager!!.updateAppWidget(appWidgetIds[i], layout)
}
super.onUpdate(context, appWidgetManager, appWidgetIds)
}
}
ダークモードが切り替えられたとき、onUpdate は呼び出されません。ただし、ダーク モードが切り替えられたときに AppWidgetProvider 内で呼び出されるメソッドが見つからないように見えるため、新しいレイアウト ビルドを呼び出す場所や、変更が必要な場合を検出する方法さえわかりません。
どんな助けでも大歓迎です。