gpt4 book ai didi

android - 从公共(public)资源为自定义 ViewGroup 的多个组件创建 StateListDrawables

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:14 26 4
gpt4 key购买 nike

我创建了一个扩展 ViewGroup 的类。此 MyCustomViewGroup 类的功能之一是充当扩展 Button 的嵌套类 MyButton 的容器。

我以正常方式从自定义 AttributeSet 设置 MyCustomViewGroup 的自定义属性。其中一个属性定义了 StateListDrawable 以用于 MyButton 嵌套类实例的背景。我将其存储在类变量 mMyButtonBackground 中。

public class MyCustomViewGroup extends ViewGroup {
private Drawable mMyButtonBackground;
...

每次我在 MyCustomViewGroup 中创建一个新的 MyButton 实例时,我都会将其设置为背景。

    MyButton myButton = new MyButton(context);
myButton.setBackground(mMyButtonBackground);

在运行时,StateListDrawable 似乎只对最近添加的 MyButton 实例起作用。

例如,假设我在 MyCustomViewGroup 中创建了 4 个 MyButton 实例。如果我单击 MyButton 编号 4,它的背景将根据 StateListDrawable 中的定义进行更改。如果我点击 MyButton 1 到 3,它们的背景不会改变,但 MyButton 4 会改​​变。

从逻辑上讲,这表明这是一个可变性问题。所有 MyButton 实例都共享存储在 mMyButtonBackground 中的同一个 StateListDrawable。考虑到这一点,我尝试过:

    MyButton myButton = new MyButton(context);
Drawable myButtonBackground = mMyButtonBackground.mutate();
myButton.setBackground(myButtonBackground);

但这并没有解决问题。我也尝试过专门将其转换为 StateListDrawable:

    MyButton myButton = new MyButton(context);
StateListDrawable myButtonBackground = (StateListDrawable)mMyButtonBackground.mutate();
myButton.setBackground(myButtonBackground);

这也没有解决问题。在我试图解决这个问题的研究中,我已经阅读了 this article by Romain Guy on Drawable mutations .我本以为,由于 StateListDrawable 是 Drawable 的子类,我应该能够应用相同的方法,但我似乎无法让它工作。我错过了什么?

最佳答案

您不能与多个 View 共享一个 SLD 实例,每个 View 需要一个 SLD,抱歉

关于android - 从公共(public)资源为自定义 ViewGroup 的多个组件创建 StateListDrawables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18954023/

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