web-dev-qa-db-ja.com

ダイアログのカスタムチェックボックススタイル

複数選択項目(チェックボックス)を使用してダイアログを作成しています。

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setMultiChoiceItems(arrayResource, selectedItems, new DialogInterface.OnMultiChoiceClickListener() {
    // ...
});

AlertDialog dialog = builder.create();
dialog.show();

そして、チェックボックスのカスタムスタイルがあります。

<style name="CustomCheckBox" parent="@Android:style/Widget.CompoundButton.CheckBox">
    <item name="Android:button">@drawable/btn_check</item>
    <item name="Android:textColor">@Android:color/holo_purple</item>
</style>

style="@style/CustomCheckBox"を設定することにより、レイアウトの個々のチェックボックスに適用すると完全に機能します。

しかし、作成したダイアログにこのスタイルを適用するにはどうすればよいですか?または、テーマ全体について...

どういうわけか関連がある場合-私はminSdkVersion=14targetSdkVersion=19を使用しています。


更新:

MattMattの回答によると、テーマ全体にカスタムチェックボックススタイルを適用し、ダイアログのカスタムスタイルも設定しています。

<style name="AppTheme" parent="AppBaseTheme">
    <item name="Android:checkboxStyle">@style/CustomCheckBox</item>
    <item name="Android:dialogTheme">@style/CustomDialog</item>
    <item name="Android:alertDialogTheme">@style/CustomDialog</item>
</style>

<style name="CustomCheckBox" parent="@Android:style/Widget.CompoundButton.CheckBox">
    <item name="Android:button">@drawable/btn_check</item>
    <item name="Android:checkMark">@drawable/btn_check</item>
</style>

<style name="CustomDialog" parent="@Android:style/Theme.Holo.Light.Dialog">
    <item name="Android:checkboxStyle">@style/CustomCheckBox</item>
    <item name="Android:background">#aaf</item>
</style>

これで、レイアウトに追加されたチェックボックスにカスタムスタイルが適用され、ダイアログの背景を変更できますが、ダイアログのチェックボックスはまったく影響を受けません...

13
yprez

実際、setMultiChoiceItemsを呼び出すと、CheckBoxウィジェットではなく、CheckedTextViewウィジェットが生成されます。 【更新】checkMark属性の値を変更しても効果がないようです。ただし、CustomDialogスタイルのlistChoiceIndicatorMultiple属性の値を変更することで、選択肢のドローアブルを変更することができました。このような:

<style name="CustomDialog" parent="@Android:style/Theme.Holo.Light.Dialog">
    <item name="Android:listChoiceIndicatorMultiple">@drawable/btn_check</item>
    <item name="Android:background">#aaf</item>
</style>

Androidソースコードを見て、ダイアログボックスの複数選択項目に使用されるテンプレートが次のテンプレートであることがわかったので、これを発見しました。

https://github.com/Android/platform_frameworks_base/blob/master/core/res/res/layout/select_dialog_multichoice_holo.xml

11
mikeplate

あなたが探しているものはすべて見つけることができます ドキュメントのテーマとスタイルで そして見つけた属性であなたのテーマの属性を適用します in Android attrs docs

簡単にするために、次の例に従ってください。

<style name="myTheme" parent="@Android:Theme.Holo">
    <!-- override default check box style with custom checkBox -->
    <item name="Android:checkBoxStyle">@style/CustomCheckBox</item>

</style>
<style name="CustomCheckBox" parent="@Android:style/Widget.CompoundButton.CheckBox">
<item name="Android:button">@drawable/btn_check</item>
<item name="Android:textColor">@Android:color/holo_purple</item>

これで、「myTheme」がActivityに設定されている限り、カスタムチェックボックスがあります;)

これがお役に立てば幸いです、幸せなコーディング!

3
MattMatt

すべてのチェックボックス状態にドローアブルを設定できます。ドローアブルは画像や図形である可能性があるため、必要な背景を自由に設定できます。

1> cbがチェックされている状態とチェックされていない状態の2つのpngファイルを必要に応じて作成し、アプリの描画可能なフォルダーに保存します。

2>次に、次のように1つのcustomdrawble.xmlファイルを作成します。

<?xml version="1.0" encoding="utf-8"?>
     <selector  xmlns:Android="http://schemas.Android.com/apk/res/Android">
     <item Android:state_checked="false" Android:drawable="@drawable/yourdrawable1" />
     <item Android:state_checked="true" Android:drawable="@drawable/yourdrawable2" />
     <item Android:drawable="@drawable/yourdrawable1" /> <!-- default -->
</selector>

3>次に、チェックボックスを次のようにします。

<CheckBox
    Android:id="@+id/chk"
    Android:button=“@drawable/customdrawable”
    Android:layout_alignParentLeft="true"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content" />

解決策は、単一のチェックボックスの表示を変更するために私のために働いた

0
karan