【发布时间】:2018-01-11 21:41:00
【问题描述】:
我正在为 LG V20/V10 开发一个信息小部件,以便在第二个屏幕中运行(添加一个非常容易:只需将您的类别设置为 36864/0x9000)。目前,我在 RemoteViews 布局中有一个电池视图和一个 TextClock:
<!--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() 为每个小部件 ID(在 Kotlin 中)调用:
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()。
在电池功能中一切正常:我可以使用配置活动来更改色调颜色以及是否显示百分比,并且更改会立即发生。但是,无论出于何种原因,clock 函数中的函数似乎都没有做任何事情。
当视图膨胀时,我已经设置了一种颜色来着色它,它仍然是白色的。如果我改变格式,什么都不会发生。就好像 TextClock 函数实际上没有被调用一样。
我什至检查了 AOSP 源,看起来应该允许 RemoteViews 对象中的这些方法:setFormat12Hour(CharSequence charSequence)
我做错了什么?
【问题讨论】: