我有一个带有可绘制背景的小部件布局:
<RelativeLayout
android:id="@+id/basic_widget_layout"
android:background="@drawable/basic_widget_style_2"
android:clickable="true" >
@drawable/basic_widget_style_2
是两个形状的图层列表。
我还有一个配置活动,显示我的小部件的预览以进行实时调整:
<include android:id="@+id/preview_include"
layout="@layout/basic_widget_layout" />
我正在尝试通过我的配置活动以编程方式调整@drawable/basic_widget_style_2
,并在@+id/preview_include
中查看实时结果。
在我的配置活动中,我有启动我的特定appWidgetId,所以我的问题是 - 是否有可能获得属于启动我的活动的小部件的@drawable/basic_widget_style_2
?
此外,如何使<include>
- ed布局背景可绘制无效?
似乎无论我做什么,布局都保持静态(尝试使用invalidate(),refreshDrawable()和我见过的更多技巧。)
答案 0 :(得分:0)
我无法理解你想要在背景画中改变什么。
为了获得View的可绘制形状,您需要为包含形状的项目指定id,然后执行以下操作:
//change the color to the specific needed
LayerDrawable preview_include = (LayerDrawable)(this.findViewByID(R.id.preview_include)).getBackground();
final GradientDrawable preview_include_shape = (GradientDrawable) include.findDrawableByLayerId(R.id.rectange);
如果要更改形状的颜色,请执行以下操作:
preview_include_shape.setColor(getResources().getColor(getResId("white", R.color.class)));
具有形状的XML Drawable可能如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- Up 2dp Shadow -->
<item >
<shape android:shape="rectangle">
<solid android:color="@color/shadow" />
<corners
android:radius="3dp"
/>
</shape>
</item>
<!-- A rectange -->
<item android:top="3px" android:id="@+id/rectange">
<shape android:shape="rectangle">
<corners
android:topLeftRadius="3dp"
android:topRightRadius="3dp"
android:bottomLeftRadius="3dp"
android:bottomRightRadius="3dp"/>
<solid android:color="@color/black"
/>
</shape>
</item>