gpt4 book ai didi

android - 如何在运行时自定义以 XML 定义的自定义可绘制对象?

转载 作者:搜寻专家 更新时间:2023-11-01 08:45:34 24 4
gpt4 key购买 nike

我制作了一个自定义的多层可绘制对象作为按钮的背景。有时,我希望这个可绘制层的一部分是蓝色的。有时我希望它是绿色的。重点是,它是一个变量,我希望它可以在关联的自定义 View XML 中定义。

这可能吗?如何用 XML 编写可在运行时确定其值的可绘制对象?

custom_button.xml

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/button_inset_horizontal_material"
android:insetTop="@dimen/button_inset_vertical_material"
android:insetRight="@dimen/button_inset_horizontal_material"
android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="?attr/colorButtonNormal" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>
</inset>

<solid android:color="?attr/colorButtonNormal" />是我想在运行时设置的。我的此类自定义 View 已经接收到我想在此处使用的颜色值 - 如何将其应用于此可绘制对象的 XML?

最佳答案

像这样:

InsetDrawable drawable = (InsetDrawable) myButton.getBackground();
GradientDrawable shape = (GradientDrawable) drawable.getDrawable();
shape.setColor(Color.BLUE);

I made a custom, multi-layered drawable to act as the background for a button.

这假设 myButton 是您在上面提到的按钮,并且已定义为

android:background="@drawable/custom_button"

编辑

对于执行此操作的 API 级别 1 方法:

制作一个可绘制的custom_shape.xml:

<shape android:shape="rectangle">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="?attr/colorButtonNormal" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>

编写一个方法来改变这个可绘制对象的颜色并在其周围放置一个插图:

private void changeColor() {
// Get shape from XML
GradientDrawable shape = (GradientDrawable) getResources().getDrawable(R.drawable.custom_shape);
shape.setColor(Color.BLUE);

// Programmatically create Inset
InsetDrawable drawable = new InsetDrawable(shape,
getResources().getDimensionPixelSize(R.dimen.button_inset_horizontal_material),
getResources().getDimensionPixelSize(R.dimen.button_inset_vertical_material),
getResources().getDimensionPixelSize(R.dimen.button_inset_horizontal_material),
getResources().getDimensionPixelSize(R.dimen.button_inset_vertical_material));

// Apply to button
myButton.setBackground(drawable);
}

关于android - 如何在运行时自定义以 XML 定义的自定义可绘制对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28697849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com