我的小部件配置活动,用户可以选择小部件的形状,颜色和图像src。
我的小部件具有非常简单的XML布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/backgroundImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@drawable/rounded_conners"
android:clickable="false"
android:focusable="false"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ImageButton
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:background="@drawable/transparent_color"
android:clickable="true"
android:focusable="true"
android:padding="8dp"
android:scaleType="fitCenter"
android:src="@drawable/btn03_off" />
</RelativeLayout>
在src参数中选择图像并在图像视图的src中设置一个形状,例如:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@color/background_red" />
<corners android:bottomLeftRadius="20dp" android:bottomRightRadius="20dp"
android:topLeftRadius="20dp" android:topRightRadius="20dp" />
我想根据用户选择的颜色,形状和图像以编程方式更改它。不幸的是我无法解决这个问题。我可以在活动中更改图像按钮背景/形状,颜色和图像src。但我不能在widget中做到这一点,因为我没有图片按钮的参考,在widget中没有findViewById等。
我可以像这样更改图像视图的形状:
views.setImageViewResource(R.id.backgroundImage, R.drawable.square);
不幸的是我无法弄清楚如何改变它的颜色。在活动中,我可以这样做:
((GradientDrawable)mPreviewImageView.getBackground()).setColor(colorId);
但如果我没有图像视图的实例,我不能这样做。
BTW:会有很多变化,所以我不能制作大量的XML布局,只是根据用户输入进行更改。我需要动态地做。感谢您的建议