以编程方式更改在另一个xml中用作背景的border.xml的startColor?

时间:2013-02-27 01:22:42

标签: android xml shape

我在drawable文件夹中有一个名为border.xml的xml文件。 在这个xml我有

<!-- +++++++++++++++++++++  BORDER  +++++++++++++++++++ -->
<item> 
    <shape android:shape="rectangle">
        <solid
            android:id="@+id/shape_border_color" 
            android:color="@color/black" /> 
        <gradient 
            android:id="@+id/shapre_border_gradient" 
            android:startColor="@color/BurlyWood" 
            android:endColor="@color/Blue" 
            android:angle="270"
        /> 
<!-- ++++++++++++++++++++ ROUND CORNERS ++++++++++++++++++++++++++++ -->
        <corners
            android:id="@+id/shape_border_corners" 
            android:bottomRightRadius="7dp" 
            android:bottomLeftRadius="7dp" 
            android:topLeftRadius="7dp" 
            android:topRightRadius="7dp"
    /> 
    </shape>
</item>   

<!-- +++++++++++++++++++++++  BACKGROUND ++++++++++++++++++++++++++ -->
<item 
    android:left="5dp" 
    android:right="5dp"  
    android:top="5dp" >  
    <shape android:shape="rectangle"> 
        <gradient 
            android:id="@+id/shape_background" 
            android:id="@+id/hr_design_background_gradient" 
            android:startColor="@color/DarkOrchid" 
            android:endColor="@color/LawnGreen" 
            android:angle="270"/>
    </shape>
</item>    

我使用以下代码将上面的xml文件用作main.xml文件中LinearLayout的背景

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:padding="0dp"
    android:background="@drawable/border_o2">

在我的Main.java活动中,我有兴趣更改边框的start and end colors以及角落的backgroundRadius

如果我使用的是TextView,我知道如何更改某个id的背景。但我不确定如何改变Item / Shape / Gradiant值。

由于

1 个答案:

答案 0 :(得分:3)

一种方法是定义第二个可绘制资源,称为drawable / alternate_background.xml。在此文件中,您可以编码备用颜色,半径值等。

然后以编程方式加载备用资源。

linearLayout.setBackgroundResource(R.drawable.alternate_background);

FWIW,这种方法的一个优点是您的视图仍然是外部化的。因此,您可以使用Eclipse布局编辑器预览更改,而不是等到运行时才能看到更改的效果。