设置小部件背景的透明度

时间:2013-06-19 09:18:30

标签: android android-widget

我有一个主屏幕小部件,线性布局。我正在尝试使用远程视图在运行时为背景设置Alpha,但是小部件不会加载。

我正在使用它:

remoteView.setFloat(R.id.widget_background, "setAlpha", (float)0.7);

以相同的方式设置背景颜色或文本颜色,有效。 如何使用远程视图设置背景透明度?

5 个答案:

答案 0 :(得分:2)

使用十六进制的背景颜色有一个简单的解决方案。你有一种颜色,例如RED - #ff0000

将背景红色设置为您的应用小部件,您可以使用:

widget.setInt(R.id.widget_list, "setBackgroundColor", Color.parseColor("#ff0000"));

对于颜色透明度,只需在颜色前面添加多少颜色 - 透明度支持,例如:

20%的颜色为#20ff0000enter image description here

对于85%的颜色#85ff0000,您将拥有: enter image description here

答案 1 :(得分:1)

1.您可以使用Style.xml使背景透明,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
  </style>
</resources>

将此文件设置为窗口小部件的主题。 要么 2.输入80后,在#颜色代码中签名如下:#80000000 希望它有所帮助..您可以使用#80FFFFFF作为背景,没有任何颜色。我没有在代码中尝试过它,但可能对它有帮助。

答案 2 :(得分:1)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@android:color/transparent">


    <ImageView
        android:id="@+id/widget_image"
        android:layout_width="110sp"
        android:layout_height="110sp"
        android:layout_gravity="center"
        android:src="@drawable/flashlight1" />
</LinearLayout>

只需将布局背景设置为透明。添加以下代码。这对我有用。

android:background="@android:color/transparent"

答案 3 :(得分:1)

我使用了以下解决方案:

float opacity = 0.3f;           //opacity = 0: fully transparent, opacity = 1: no transparancy
int backgroundColor = 0x000000; //background color (here black)
remoteView.setInt( R.id.loMain, "setBackgroundColor", (int)(opacity * 0xFF) << 24 | backgroundColor);

loMain 是我的小部件的主要布局

如果小部件的主要布局使用具有圆角的形状背景(例如android:background =“@ drawable / shape_transparent”),那么这里是一个更复杂的解决方案:

        float transparency = 0.5f;  //0...1
        long colorFilter = 0x01000000L * (long)(255f * transparency);   
        try {
            final Method[] declaredMethods = Class.forName("android.widget.RemoteViews").getDeclaredMethods();
            final int len = declaredMethods.length;
            if (len > 0) {
                for (int m=0; m<len; m++ ) {
                    final Method method = declaredMethods[m];
                    if (method.getName().equals("setDrawableParameters")) {
                        method.setAccessible(true);
                        method.invoke(remoteView, R.id.loMain, true, -1, (int)colorFilter, PorterDuff.Mode.DST_OUT, -1);
                        break;
                    }
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }

您可以使用变量 alfa colorFilter 来满足您的需求。

答案 4 :(得分:0)

Set transparent background of an imageview on Android

以上链接是此类背景颜色的最佳解决方案。

  

黑色代码: -

<color name="black">#000000</color>
  

现在,如果您想使用不透明度,可以使用以下代码: -

<color name="black">#99000000</color> 
  

下面的不透明度代码: -

100% - FF

95% - F2

90% - E6

85% - D9

80% - CC

75% - BF

70% - B3

65% - A6

60% - 99

55% - 8C

50% - 80

45% - 73

40% - 66

35% - 59

30% - 4D

25% - 40

20% - 33

15% - 26

10% - 1A

5% - 0D

0% - 00