Android 应用小部件背景形状以编程方式更改颜色不透明度
Android app widgets background shape change color opacity programmatically
我开发了一个带有圆角的应用程序小部件。我基本上已经将背景可绘制对象设置为应用程序小部件布局的根。
现在我正尝试在不丢失圆角的情况下更改其背景不透明度。
我知道 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>
你知道有什么方法可以做到吗?谢谢
你可以试试这个代码
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))
当您设置背景颜色时,您将替换现有的可绘制对象,有点烦人。我建议考虑在背景视图中设置色调,您可能会发现这个答案有帮助:How to set tint for an image view programmatically in android?
为了解决这个问题,我从我的根 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)
我开发了一个带有圆角的应用程序小部件。我基本上已经将背景可绘制对象设置为应用程序小部件布局的根。
现在我正尝试在不丢失圆角的情况下更改其背景不透明度。
我知道 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>
你知道有什么方法可以做到吗?谢谢
你可以试试这个代码
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))
当您设置背景颜色时,您将替换现有的可绘制对象,有点烦人。我建议考虑在背景视图中设置色调,您可能会发现这个答案有帮助:How to set tint for an image view programmatically in android?
为了解决这个问题,我从我的根 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)