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 要素が box-part なしで表示されるようになりました。テキストのみが表示されます。

他のすべてのカスタム スタイル要素は意図したとおりに機能しますが、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」という名前のファイルが他にないため、これは少し奇妙です。私の唯一の推測は、エクリプスが動いていたということです!

于 2012-05-22T11:19:45.693 に答える