TextClock в AppWidget не отвечает на вызовы функций

Я работаю над информационным виджетами для LG V20 / V10, чтобы работать на втором экране (очень просто добавить его: просто установите свою категорию в 36864 / 0x9000). В настоящее время у меня есть вид батареи и TextClock в макете RemoteViews:

<!--info_widget.xml--> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main" android:layout_width="1040px" android:layout_height="160px"> <include android:id="@+id/battery" layout="@layout/battery_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_toLeftOf="@+id/clock" android:layout_gravity="right" /> <include android:id="@+id/clock" layout="@layout/clock_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentEnd="true" android:layout_alignParentTop="true" android:layout_gravity="right" /> </RelativeLayout> <!--battery_view.xml--> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="160px" android:layout_gravity="center" android:foregroundGravity="center" android:orientation="vertical" android:padding="2dp"> <ImageView android:id="@+id/battery_view" android:layout_width="70px" android:layout_height="match_parent" android:layout_gravity="center" android:layout_weight="1" android:scaleType="centerCrop" android:tint="#fff" app:srcCompat="@drawable/ic_battery_alert_black_24dp" /> <TextView android:id="@+id/battery_percent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center" android:textColor="#fff" android:textSize="40px" /> </LinearLayout> <!--clock_view.xml--> <TextClock xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:padding="2dp" android:textSize="64px" android:id="@+id/clock_view"/> 

В моем коде у меня есть эти функции, которые вызываются из onUpdate() для каждого идентификатора виджетов (в Котлине):

 private fun updateBattery(views: RemoteViews) { val level = mBatteryManager?.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) val charging = mBatteryManager?.isCharging mBatteryState.updateState(level as Int, charging as Boolean) views.setImageViewResource(R.id.battery_view, mBatteryState.imageResource) var color = mPrefs?.getInt("battery_color", Color.WHITE) var showPercent = mPrefs?.getBoolean("show_percent", true) if (color == null) color = Color.WHITE if (showPercent == null) showPercent = true views.setInt(R.id.battery_view, "setColorFilter", color) views.setTextColor(R.id.battery_percent, color) if (showPercent) { views.setViewVisibility(R.id.battery_percent, View.VISIBLE) views.setTextViewText(R.id.battery_percent, mBatteryState.percent.toString() + "%") } else { views.setViewVisibility(R.id.battery_percent, View.GONE) } } private fun updateClock(views: RemoteViews) { var hour_24 = mPrefs?.getBoolean("24_hour", false) var amPm = mPrefs?.getBoolean("am_pm", true) var showDate = mPrefs?.getBoolean("show_date", false) var color = mPrefs?.getInt("clock_color", Color.WHITE) if (hour_24 == null) hour_24 = false if (amPm == null) amPm = true if (showDate == null) showDate = false if (color == null) color = Color.WHITE val format: CharSequence = if (showDate) "EE, d " else {""} + if (hour_24) "k" else {"h"} + ":mm" + if (amPm) " a" else {""} views.setCharSequence(R.id.clock_view, "setFormat12Hour", format) views.setCharSequence(R.id.clock_view, "setFormat24Hour", format) views.setTextColor(R.id.clock_view, color) } 

У меня есть служба, которая запускается, для прослушивания изменений предпочтений и получения трансляции, которая вызывает onUpdate() виджетов всякий раз, когда что-то происходит.

Все работает отлично в функции батареи: я могу использовать активность конфигурации, чтобы изменить цвет оттенка и отобразится ли процент, и изменения происходят немедленно. Тем не менее, по какой-либо причине функции в функции часов, похоже, ничего не делают.

Когда вид завышен, и у меня есть цвет, уже настроенный на его оттенок, он по-прежнему белый. Если я изменю формат, ничего не произойдет. Это почти так, как если бы функции TextClock фактически не вызывались.

Я даже проверял источник AOSP, и похоже, что эти методы должны быть разрешены из объекта RemoteViews : setFormat12Hour (CharSequence charSequence)

Что я сделал неправильно?

Ну, я понял это, и я честно понятия не имею, почему так. Я заметил, что когда я добавил еще один виджет на информационный экран, он тоже не отвечал на изменения. Поэтому я рассмотрел различия между двумя сломанными видами и одним рабочим видом (батарея).

Я обнаружил, что вид батареи включен в LinearLayout, и не знаете ли вы его, включив TextClock и новый виджет (и ImageView) в фиктивный LinearLayouts, исправил проблему:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent"> <TextClock android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:padding="2dp" android:textSize="64px" android:id="@+id/textClock" /> </LinearLayout>