【问题标题】:android app widget dynamic background color with rounded corners android 2.3带有圆角的android应用小部件动态背景颜色android 2.3
【发布时间】: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


    【解决方案1】:

    迟到总比不到好:

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

    【讨论】:

    • 与问题中的代码相同,但一个 xml drawable 没有solid 属性作为默认资源,问题中的一个用于sdk 14 及更高版本
    • 兄弟,我希望我能给你很多赞成票。找了好久,终于找到了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2011-09-23
    • 2023-03-19
    相关资源
    最近更新 更多