我在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
方法
答案 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);