CheckBox如何获得它各自的drawable?

时间:2011-01-11 22:22:02

标签: android checkbox coding-style

CheckBox类扩展了CompoundButton,但没有添加任何内容。但有些人如何获得它各自的外观。我在Android源代码中发现了一些声明,但是想知道它们是如何映射到CheckBox类的?

public class CheckBox extends CompoundButton {
    public CheckBox(Context context) {
        this(context, null);
    }

    public CheckBox(Context context, AttributeSet attrs) {
        this(context, attrs, com.android.internal.R.attr.checkboxStyle);
    }

    public CheckBox(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
}

样式

<style name="Theme">
    <item name="checkboxStyle">@android:style/Widget.CompoundButton.CheckBox</item>
</style>

<style name="Widget.CompoundButton.CheckBox">
    <item name="android:background">@android:drawable/btn_check_label_background</item>
    <item name="android:button">@android:drawable/btn_check</item>
</style>

修改

可能我不清楚......我理解如何将drawable分配给Widget.CompoundButton.CheckBox样式,但是这个样式如何分配给CheckBox类?我在样式名称中看到了“.CheckBox”,但是这个命名约定真的是什么诀窍呢?如果是这样,那么规则是什么?如果我从CompoundButton派生MyCheckBox,我可以只定义Widget.CompoundButton.MyCheckBox样式,它会起作用吗?

2 个答案:

答案 0 :(得分:4)

答案是:<item name="android:button">@android:drawable/btn_check</item>

drawable可以有多个状态(无论元素是否被聚焦,按下等),这就是复选框的不同状态。

编辑:在您修改问题之后,我发现您正在寻找不同的东西。再一次,这就是你发布的内容:

<style name="Widget.CompoundButton.CheckBox">

这就是风格。

<item name="checkboxStyle">@android:style/Widget.CompoundButton.CheckBox</item>

主题(android.internal.R.attr)有一个属性“checkboxStyle”,指向这种风格。

public CheckBox(Context context, AttributeSet attrs) {
    this(context, attrs, com.android.internal.R.attr.checkboxStyle);
}

构造函数将该属性分配给视图。就是这样。

答案 1 :(得分:1)

就在这里

<item name="android:button">@android:drawable/btn_check</item>