CheckBox按钮选择器会生成不可见的复选框

时间:2012-05-21 19:42:51

标签: android android-layout

我正在尝试设置我在布局中使用的CheckBox元素。

由于我希望样式在不同的活动中保持一致,因此我创建了一个我在清单中应用的自定义主题。

styles.xml文件如下所示:

<style name="LightTheme" parent="@android:style/Theme.NoTitleBar">
   .
   .
   <item name="android:checkboxStyle">@style/CustomCheckBox</item>
   .
   .
</style>
.
.
<style name="CustomCheckBox" parent="@android:style/Widget.CompoundButton.CheckBox"> 
    <item name="android:button">@drawable/btn_check_selector</item> 
    <item name="android:textColor">@color/mainTextColorLight</item>
    <item name="android:textSize">15dp</item>
</style> 
.
.

选择器与SDK中的CheckBox选择器基本相同,如下所示:

<!-- Enabled states -->        
<item android:state_checked="true" android:state_window_focused="false"
      android:state_enabled="true"
      android:drawable="@drawable/btn_check_on" />
<item android:state_checked="false" android:state_window_focused="false"
      android:state_enabled="true"
      android:drawable="@drawable/btn_check_off" />

<item android:state_checked="true" android:state_pressed="true"
      android:state_enabled="true"
      android:drawable="@drawable/btn_check_on_pressed" />
<item android:state_checked="false" android:state_pressed="true"
      android:state_enabled="true"
      android:drawable="@drawable/btn_check_off_pressed" />

<item android:state_checked="true" android:state_focused="true"
      android:state_enabled="true"
      android:drawable="@drawable/btn_check_on_focused" />
<item android:state_checked="false" android:state_focused="true"
      android:state_enabled="true"
      android:drawable="@drawable/btn_check_off_focused" />

<item android:state_checked="false"
      android:state_enabled="true"
      android:drawable="@drawable/btn_check_off" />
<item android:state_checked="true"
      android:state_enabled="true"
      android:drawable="@drawable/btn_check_on" />


<!-- Disabled states -->

<item android:state_checked="true" android:state_window_focused="false"
      android:drawable="@drawable/btn_check_on_disabled" />
<item android:state_checked="false" android:state_window_focused="false"
      android:drawable="@drawable/btn_check_off_disabled" />

<item android:state_checked="true" android:state_focused="true"
      android:drawable="@drawable/btn_check_on_disabled_focused" />
<item android:state_checked="false" android:state_focused="true"
      android:drawable="@drawable/btn_check_off_disabled_focused" />

<item android:state_checked="false" android:drawable="@drawable/btn_check_off_disabled" />
<item android:state_checked="true" android:drawable="@drawable/btn_check_on_disabled" />

选择器存储在项目的“drawable”文件夹中,密度特定资源存储在drawable- {l | m | h | xh} dpi文件夹中。

奇怪的是,这种方法很长时间以来都很有效。但今天,它突然不再起作用了。 CheckBox元素现在显示没有box-part。只有文字可见。

所有其他自定义样式元素都按预期工作,而CheckBox显示这种奇怪的行为。

我尝试将样式直接应用于带有xml的CheckBox,没有运气。也做了通常的“清洁工程”。我能让它工作的唯一方法是将选择器复制到我项目中的所有drawable- {l | m | h | xh} dpi文件夹。我的印象是没有必要在每个可绘制的文件夹中都有选择器的副本,而且对于我的其他自定义选择器来说肯定没有必要。

我的代码中是否有人发现任何明显的缺陷?

1 个答案:

答案 0 :(得分:0)

终于解决了,问题似乎是某种名称冲突。

将我的选择器从'btn_check_selector.xml'重命名为'selector_check.xml',并对我的CustomCheckBox样式进行了相应的更改:

<style name="CustomCheckBox" parent="@android:style/Widget.CompoundButton.CheckBox"> 
    <item name="android:button">@drawable/selector_check</item> 
    <item name="android:textColor">@color/mainTextColorLight</item>
    <item name="android:textSize">15dp</item>
</style> 

选择器位于我项目的“drawable”文件夹中,密度特定资源位于各自的drawable- {l | m | h | xh} dpi文件夹中。

这有点奇怪,因为我的项目中没有任何名为'btn_check_selector'的文件。我唯一的猜测是Eclipse正在表演!