1

我正在尝试设置我在布局中使用的 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 元素现在显示为没有框部分。只有文本可见。

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

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

谁能在我的代码中发现任何明显的缺陷?

4

1 回答 1

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 搞砸了!

于 2012-05-22T11:19:45.693 回答