0

我有一个带有可绘制背景的小部件布局:

<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() 和我见过的更多技巧)。

4

1 回答 1

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>

于 2014-03-06T09:21:46.123 回答