【发布时间】:2014-08-18 07:19:07
【问题描述】:
我在实现在 android 2.3 中动态更改小部件背景颜色时遇到问题。
我在实现中使用了这种方法: http://oceanuz.wordpress.com/2013/07/11/widget-remoteviews-round-corners-background-and-colors/
所以我的 WidgetLayout 中有一个 ImageView:
<ImageView
android:id="@+id/widget_background_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/widget_bg_shape" />
widget_bg_shape 是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid
android:color="#496fb3"/>
<corners
android:radius="3dp" />
</shape>
我的代码会根据用户偏好更改背景颜色:
private static void setBackgroundColor(Context pContext, int pWidgetID,
RemoteViews remoteViews) {
float[] color = { 218, 59 / 100F, 70 / 100F };
int transparency = 192;
SharedPreferences settings = pContext.getSharedPreferences("Widget"
+ pWidgetID, Context.MODE_PRIVATE);
Color.colorToHSV(settings.getInt("color", Color.HSVToColor(color)),
color);
transparency = settings.getInt("transparency", transparency);
remoteViews.setInt(R.id.widget_background_image, "setColorFilter",
Color.HSVToColor(color));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
remoteViews.setInt(R.id.widget_background_image, "setImageAlpha",
transparency);
} else {
remoteViews.setInt(R.id.widget_background_image, "setAlpha",
transparency);
}
因此,在较新的 android 版本上,这可以正常工作,但在 Android 2.3 上(使用 android 2.3.6 在三星 S+ 上进行测试,也有来自其他设备的一些用户反馈)背景始终是完全透明的。
我发现,对 remoteView 的 setColorFilter 或 setAlpha 调用导致图像完全透明或不存在。
根据上面的文章 postet 和引用的 stackoverflow 问题 (Rounded corners on dynamicly set ImageView in widget?),这应该适用于 android 2.2 及以上版本。但就我而言,它没有。
谁能帮我解决这个问题?
【问题讨论】:
标签: android widget background-image transparency background-color