Personnalisé case de style dans la boîte de dialogue
Je suis de la construction d'un dialogue avec multi-choix des éléments (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 individuelles dans la mise en page, par la mise en style="@style/CustomCheckBox"
.
Mais comment puis-je appliquer ce style à la création de dialogue? Ou, alternativement, pour l'ensemble du thème...
Si c'est en quelque sorte pertinent - je suis en utilisant minSdkVersion=14
et targetSdkVersion=19
.
Mise à jour:
Maintenant selon MattMatt de réponse, je suis en application d'une coutume case à cocher du style à l'ensemble du thème, et aussi les paramètres d'un style personnalisé pour les dialogues:
<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>
Maintenant, n'importe quel case ajoutée à la mise en page obtient le style personnalisé, et je suis en mesure de changer la boîte de dialogue arrière-plan, mais les cases à cocher dans la boîte de dialogue ne sont pas touchés de façon...
OriginalL'auteur yprez | 2014-01-25
Vous devez vous connecter pour publier un commentaire.
En fait, l'appel setMultiChoiceItems ne résulte pas d'une Case à cocher widgets mais CheckedTextView widgets. [Mise à jour] Il semble également que le fait de changer la valeur de la coche en regard de l'attribut n'a aucun effet. Cependant, en modifiant la valeur de la listChoiceIndicatorMultiple de l'attribut de l'CustomDialog style, j'ai été en mesure de changer le drawable pour le choix. Comme ceci:
J'ai découvert ça en regardant le code source Android et de trouver que le modèle utilisé pour les questions à 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
Oui. J'ai eu le temps de créer un exemple de projet moi-même et je peux changer le fond de la CheckedTextView dans le style. Malheureusement, la définition de la coche n'a aucun effet pour moi non plus. J'ai remarqué que checkedTextViewStyle exige de l'API de niveau 17 (4.2), mais vous avez que le droit?
Juste mis à jour mes découvertes dans la réponse après la découverte de la listChoiceIndicatorMultiple attribut. Je l'ai testé et il fonctionne.
Wow, ça fonctionne! Merci!!!
OriginalL'auteur mikeplate
Tout ce que vous cherchez peut être trouvé les Thèmes et les Styles de la docs, et d'appliquer les attributs de votre thème avec les attributs trouvé dans Android attrs docs
Pour le rendre facile pour vous, suivez cet exemple:
Maintenant, tant que "myTheme" est défini à l'Activité, vous avez une case à cocher personnalisé 😉
Espère que cette aide, bon codage!
Essayez de thématisation les boîtes de dialogue ainsi, le chercher dans les docs que j'ai lié. Doit être quelque chose comme
<item name="android:dialogStyle">@style/myCustomDialog</item>
placé dans votre thème. Le style doit être<style name="myCustomDialog" parent="@android:style/Widget.DeviceDefault.Dialog> <!-- customize your dialog here --> </style>
Il n'y a pas de
android:dialogStyle
, mais j'ai réussi à définir un style personnalisé dans le constructeur:new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.CustomDialog));
. Mais devinez quoi, la boîte de dialogue personnaliser le style affecte tous les autres biens, mais pas les cases à cocher...Je suis désolé, vous avez raison, il n'y a pas un
android:dialogStyle
attribut. Il estandroid:dialogTheme
attribut. Tous les attributs peuvent être trouvées à l'adresse developer.android.com/reference/android/R.attr.html , pour le rendre plus facile, généralementctrl + f
va rechercher du texte sur la page. il suffit de chercher "dialogue" ou "case à cocher"Merci. Se sent comme j'y suis presque. Mais la case à cocher style toujours ne s'applique pas. E. g. Je peux changer la couleur d'arrière-plan de la boîte de dialogue, mais les cases à cocher ne sont pas touchés...
OriginalL'auteur MattMatt
vous pouvez définir un drawable pour la case tous les états. Un drawable peut-être des photos ou des formes, de sorte que vous êtes libre de définir l'arrière-plan que vous voulez avoir.
1> faire deux fichiers png pour cb coché et décoché les états que vous le souhaitez et de les stocker dans le dossier drawable de votre application.
2> maintenant, faire un customdrawble.xml fichier comme ci-dessous:
3> maintenant, faites vos case comme ci-dessous:
la solution a fonctionné pour moi pour changer l'affichage pour seule case
OriginalL'auteur Karan Mer