Android 2.3中动态更改带圆角的Android应用程序小部件背景颜色

9
我遇到了一个问题,我的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上(在三星S+上测试了Android 2.3.6,并且还收到了其他设备的一些用户反馈),背景始终完全透明。
我发现,远程视图上的setColorFilter或setAlpha调用会导致图像完全透明或不存在。
根据上面发布的文章和引用的stackoverflow问题(小部件中动态设置ImageView的圆角?),这应该适用于Android 2.2及以上版本。但在我的情况下,它并不起作用。
有人能帮我解决这个问题吗?

你的问题就是我一直在寻找的答案,谢谢伙计,无论你在哪里 :) - Tehleel Mir
1个回答

11

迟到总比不到好:

我通过从 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>

将与问题中相同的代码保持一致,但是将一个没有solid属性的xml drawable作为默认资源,并且将问题中的drawable用于sdk版本14及以上。 - marilion91
兄弟,我真希望能给你很多赞。我搜索了很多,最终找到了这个。 - Khemraj Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接