it-swarm.com.de

Angepasster Ankreuzfeldstil im Dialog

Ich konstruiere einen Dialog mit Multi-Choice-Elementen (Kontrollkästchen):

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

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

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

Und ich habe einen benutzerdefinierten Stil für Kontrollkästchen:

<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>

Es funktioniert perfekt, wenn es auf einzelne Kontrollkästchen im Layout angewendet wird, indem Sie style="@style/CustomCheckBox" einstellen.

Aber wie kann ich diesen Stil auf den erstellten Dialog anwenden? Oder alternativ für das gesamte Thema ...

Wenn es irgendwie relevant ist - ich verwende minSdkVersion=14 und targetSdkVersion=19.


Update:

Gemäß der Antwort von MattMatt wende ich jetzt ein benutzerdefiniertes Kontrollkästchenformat für das gesamte Design an und setze auch ein benutzerdefiniertes Format für Dialoge ein:

<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>

Jetzt erhält jedes dem Layout hinzugefügte Kontrollkästchen den benutzerdefinierten Stil, und ich kann den Hintergrund des Dialogfelds ändern. Die Kontrollkästchen im Dialogfeld sind jedoch in keiner Weise betroffen.

13
yprez

Der Aufruf von setMultiChoiceItems führt tatsächlich nicht zu CheckBox-Widgets, sondern zu CheckedTextView-Widgets. [Aktualisiert] Es scheint auch, dass das Ändern des Werts für das checkMark-Attribut keine Auswirkungen hat. Durch das Ändern des Werts des Attributs listChoiceIndicatorMultiple für den CustomDialog-Stil konnte ich jedoch das Zeichenelement für die Auswahl ändern. So was: 

<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>

Ich entdeckte dies, als ich den Android-Quellcode sah und herausfand, dass die Vorlage, die für die Multiple-Choice-Elemente im Dialogfeld verwendet wird, die folgende ist:

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

11
mikeplate

Alles, was Sie suchen, ist in Designs und Styles aus den docs , und wendet die Attribute Ihres Designs mit den gefundenen Attributen in Android attrs docs an.

Um es Ihnen leicht zu machen, folgen Sie diesem Beispiel:

<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>

Solange "myTheme" auf Activity gesetzt ist, haben Sie ein benutzerdefiniertes Kontrollkästchen;)

Hoffe das hilft, fröhliche Kodierung!

3
MattMatt

sie können Drawables für alle Checkbox-Status festlegen. Drawables können Bilder oder Formen sein. Sie können also den gewünschten Hintergrund festlegen.

1> Erstellen Sie zwei png-Dateien für cb-geprüfte und ungeprüfte Zustände nach Ihren Wünschen und speichern Sie sie in einem Zeichnungsordner Ihrer App.

2> Erstellen Sie nun eine customdrawble.xml-Datei wie folgt:

<?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> Machen Sie jetzt Ihre Checkbox wie folgt:

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

die Lösung funktionierte für mich, um die Anzeige für ein einzelnes Ankreuzfeld zu ändern

0
Karan Mer