gpt4 book ai didi

android - 以编程方式将带有 LayerDrawable 的 StateListDrawable 添加到 Button 的问题

转载 作者:太空狗 更新时间:2023-10-29 15:09:28 24 4
gpt4 key购买 nike

我希望任何人都可以帮助我解决我目前遇到的这个令人沮丧的问题:我尝试以编程方式将 StateListDrawable 添加到我的其中一个按钮:

final Button btn_footer = (Button)findViewById(R.id.btn_footer);
btn_footer.setBackground(new MyStateListDrawable(this));

MyStateListDrawable类本身添加了两个LayerDrawable;一种用于按钮的常规状态,另一种用于按钮禁用或处于按下状态时显示。

public class MyStateListDrawable extends StateListDrawable {

public MyStateListDrawable(Context c) {
addState(new int[] {-android.R.attr.state_pressed, -android.R.attr.state_enabled}, getStateDrawable(c,false));
addState(new int[] {android.R.attr.state_pressed, android.R.attr.state_enabled}, getStateDrawable(c,true));
}
...

LayerDrawables是在MyStateListDrawable类的getStateDrawable方法中创建的:

...
public Drawable getStateDrawable(Context c, boolean isTransp){
GradientDrawable shadowGradient = new GradientDrawable();
GradientDrawable buttonGradient = new GradientDrawable();
[...]

Drawable[] drawableArray = {shadowGradient, buttonGradient};
LayerDrawable layerDrawable = new LayerDrawable(drawableArray);

if(isTransp)
layerDrawable.setAlpha(0x88);

return layerDrawable;
}
}

现在,当我运行该 Activity 时,按钮的默认状态会正确呈现,但如果我尝试禁用或按下按钮,样式不会更改为定义的第二个 LayerDrawable。当我通过 XML 文件将属性添加到我的按钮时,它们工作得很好,但我目前已经有 30 多个 XML 文件(每个文件在颜色或大小方面都有很小的样式变化)并且在一个中动态创建它们会非常好所有按钮的类。有人知道是什么导致了这个问题吗?

最佳答案

我终于抽出时间回到这个问题上。在尝试了很多不同的可能性之后,我通过为每个状态(按下按钮和禁用按钮时)单独添加相同的可绘制对象(!)来实现它。其他州通过为其他州添加通配符的可绘制对象覆盖。

public MyStateListDrawable(Context c) {
addState(new int[] {android.R.attr.state_pressed}, getStateDrawable(c, true));
addState(new int[] {-android.R.attr.state_enabled}, getStateDrawable(c, true));
addState(StateSet.WILD_CARD, getStateDrawable(c, false));
}
....

关于android - 以编程方式将带有 LayerDrawable 的 StateListDrawable 添加到 Button 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18186654/

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