使用Android,如何在运行时更改XML中定义的线形的笔触宽度

时间:2016-11-14 14:45:20

标签: android android-xml android-drawable shape

我在XML中定义了加号:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="line"
        android:id="@+id/line1">
        <stroke android:width="15dp" android:color="@android:color/black" />
    </shape>
</item>
<item>
    <rotate
        android:fromDegrees="90"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="-90">
        <shape android:shape="line"
            android:id="@+id/line2">
            <stroke android:width="15dp" android:color="@android:color/black" />
        </shape>
    </rotate>
</item>

在运行时,我有时想将stroke width从15dp更改为其他内容。

我的加号已添加到按钮中,其ID为move_button

        <Button
        android:background="@drawable/plus"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="7"
        android:id="@+id/move_button" />

我能够以编程方式更改move_button,但我不知道如何使用ids stroke和{在线形上设置width line1 {1}}在运行时。

这是我到目前为止所做的:

line2

我不知道接下来要做什么来改变笔画宽度。

任何帮助都将不胜感激。

编辑:

eldivino87的

This回答解决了与我几乎完全相同的问题,但LayerDrawable layerDrawable = (LayerDrawable)moveButton.getBackground(); //this is not null String horLine = "line1"; int horLineID = getResources().getIdentifier(horLine, "id", getPackageName()); //this gives an id for the horizontal line 没有setStroke方法

1 个答案:

答案 0 :(得分:1)

将id移动到List Item,Luis建议解决问题:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/line1">
    <shape android:shape="line">
        <stroke android:width="15dp" android:color="@android:color/black" />
    </shape>
</item>
<item android:id="@+id/line2">
    <rotate
        android:fromDegrees="90"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="-90">
        <shape android:shape="line">
            <stroke android:width="15dp" android:color="@android:color/black" />
        </shape>
    </rotate>
</item>

然后代码变为:

LayerDrawable layerDrawable = (LayerDrawable)moveButton.getBackground(); 
String horLine = "line1";
int horLineID = getResources().getIdentifier(horLine, "id", getPackageName()); //this gives an id for the horizontal line
GradientDrawable hLine = (GradientDrawable) layerDrawable.findDrawableByLayerId(horLineID);
hLine.setStroke(5, Color.BLACK);