我遇到了一个问题,我的android 2.3实现动态更改小部件背景颜色的功能出现了问题。
我使用了这种方法进行实现: http://oceanuz.wordpress.com/2013/07/11/widget-remoteviews-round-corners-background-and-colors/ 所以在我的WidgetLayout中有一个ImageView:
根据用户偏好,我的代码可以改变背景颜色:
在较新版本的Android上,这个功能可以正常工作,但在Android 2.3上(在三星S+上测试了Android 2.3.6,并且还收到了其他设备的一些用户反馈),背景始终完全透明。
我发现,远程视图上的setColorFilter或setAlpha调用会导致图像完全透明或不存在。
根据上面发布的文章和引用的stackoverflow问题(小部件中动态设置ImageView的圆角?),这应该适用于Android 2.2及以上版本。但在我的情况下,它并不起作用。
有人能帮我解决这个问题吗?
我使用了这种方法进行实现: 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上(在三星S+上测试了Android 2.3.6,并且还收到了其他设备的一些用户反馈),背景始终完全透明。
我发现,远程视图上的setColorFilter或setAlpha调用会导致图像完全透明或不存在。
根据上面发布的文章和引用的stackoverflow问题(小部件中动态设置ImageView的圆角?),这应该适用于Android 2.2及以上版本。但在我的情况下,它并不起作用。
有人能帮我解决这个问题吗?