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

标签 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>

你知道有什么方法可以做到吗?谢谢

最佳答案

为了解决这个问题,我从根 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)

关于Android应用程序小部件背景形状以编程方式更改颜色不透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52220143/

相关文章:

android - 将代码提取到 lib 小部件后不再工作

java - 如何在没有应用程序小部件 Activity 的情况下注册广播接收器?

android - 如何将自定义小部件添加到 Launcher3 作为默认小部件

android - 将自定义可打包对象额外或在 ArrayList 中传递给 RemoteViewsService 会中断 appwidget

Android 导航 View 从右侧

android - Phonegap 版本 : accelerometer not working android

java - 从 csv 文件中逐行读取

java - 设置请求优先级 Volley

带有大动画 gif 图像的 Android 自定义通知