我在Android 2.3中动态更改小部件背景颜色的实现面临问题.
我使用这种方法实现:http: //oceanuz.wordpress.com/2013/07/11/widget-remoteviews-round-corners-background-and-colors/
所以我的WidgetLayout中有一个ImageView:
这就是widget_bg_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,还有一些来自其他设备的用户反馈)背景总是完全透明的.
我发现,在remoteView上调用setColorFilter或setAlpha会导致Image完全透明或不透明.
根据上面的文章postet和引用的stackoverflow问题(在widget中动态设置ImageView的圆角?)这应该适用于android 2.2和obove.但就我而言,事实并非如此.
任何人都可以帮我吗?
迟到总比不到好:
我通过从android 2.x的背景可绘制形状中删除默认颜色来修复此问题
<?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <corners android:radius="3dp" /> </shape>