web-dev-qa-db-fra.com

Style de case à cocher personnalisé dans la boîte de dialogue

Je construis un dialogue avec des éléments à choix multiples (cases à cocher):

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

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

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

Et j'ai un style personnalisé pour les cases à cocher:

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

Il fonctionne parfaitement lorsqu'il est appliqué à des cases à cocher individuelles dans la présentation, en définissant style="@style/CustomCheckBox".

Mais comment puis-je appliquer ce style au dialogue créé? Ou alternativement pour le thème entier ...

Si c'est pertinent, j'utilise minSdkVersion=14 et targetSdkVersion=19.


Mettre à jour:

Maintenant, selon la réponse de MattMatt, j'applique un style de case à cocher personnalisé à l'ensemble du thème et crée également un style personnalisé pour les boîtes de dialogue:

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

Désormais, toutes les cases à cocher ajoutées à la présentation obtiennent le style personnalisé et je peux modifier l'arrière-plan de la boîte de dialogue, mais les cases à cocher de la boîte de dialogue ne sont aucunement affectées ...

13
yprez

En fait, l'appel de setMultiChoiceItems n'aboutit pas à des widgets CheckBox mais à des widgets CheckedTextView. [Mis à jour] Il semble également que la modification de la valeur de l'attribut checkMark n'a aucun effet. Cependant, en modifiant la valeur de l'attribut listChoiceIndicatorMultiple pour le style CustomDialog, j'ai été en mesure de modifier le dessin pour les choix. Comme ça: 

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

J'ai découvert cela en consultant le code source Android et en constatant que le modèle utilisé pour les éléments à choix multiples dans la boîte de dialogue est celui-ci:

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

11
mikeplate

Vous pouvez trouver tout ce que vous cherchez dans les thèmes et les styles de la documentation , et appliquer les attributs de votre thème aux attributs trouvés dans la documentation Android

Pour vous faciliter la tâche, suivez cet exemple:

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

Maintenant, tant que "myTheme" est défini sur Activité, vous avez une case à cocher personnalisée;)

J'espère que cela aide, codage heureux!

3
MattMatt

vous pouvez définir des éléments dessinables pour tous les états de case à cocher. Les objets pouvant être dessinés peuvent être des images ou des formes, vous êtes donc libre de définir l’arrière-plan de votre choix.

1> créez deux fichiers png pour cb cochés et non cochés selon votre choix et stockez-les dans le dossier pouvant être dessiné de votre application.

2> maintenant créez un fichier customdrawble.xml comme ci-dessous:

<?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> maintenant faire votre case à cocher comme ci-dessous:

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

la solution a fonctionné pour moi de changer l'affichage pour une case à cocher simple

0
Karan Mer