Android应用程序小部件背景形状以编程方式更改颜色不透明度

时间:2018-09-07 10:02:14

标签: android android-appwidget remoteview appwidgetprovider

我开发了一个带有圆角的应用程序小部件。我基本上已经将背景绘画设置为应用程序小部件布局的根。

现在,我正在尝试更改其背景不透明度而不丢失圆角。

我知道RemoteViews非常有限。

现在我正在使用以下代码:views.setInt(R.id.root_layout_widget, "setBackgroundColor", ColorUtils.setAlphaComponent(Color.WHITE, opacity))

但是这样我就失去了圆角。如果我不使用RemoteViews,我将获取元素的背景并设置其alpha。

我的根元素是LinearLayout,我的背景可绘制对象如下:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="@android:color/white" />
    <corners android:radius="2dp" />
</shape>

您知道有什么方法吗?谢谢

3 个答案:

答案 0 :(得分:0)

您可以尝试使用此代码

int transparency = 192;(the amount of opacity level you want to give)

views.setInt(R.id.root_layout_widget, "setBackgroundColor", transparency);

代替

views.setInt(R.id.root_layout_widget, "setBackgroundColor", ColorUtils.setAlphaComponent(Color.WHITE, opacity))

答案 1 :(得分:0)

设置背景色时,您将替换现有的可绘制对象,这很烦人。我建议您考虑在背景视图上设置色调颜色,您可能会发现此答案很有用:How to set tint for an image view programmatically in android?

答案 2 :(得分:0)

为了解决这个问题,我从我的根 LinearLayout 中删除了背景并将 ShapeDrawable 放置到一个 ImageView 并重新排列我的布局,如下所示:

之前:

<LinearLayout
  android:background="@drawable/round_corners">
    .....
    .....
</LinearLayout>

之后:

<FrameLayout>
    <ImageView
        android:id="@+id/background"
        android:src="@drawable/round_corners"/>
    <LinearLayout>
        .....
        .....
    </LinearLayout>
</FrameLayout>

并在不丢失圆角的情况下更改背景不透明度:

remoteViews.setInt(R.id.background, "setImageAlpha", alpha)