Пользовательский стиль checkbox в диалоге
Я создаю диалог с несколькими элементами выбора (флажками):
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=14
и targetSdkVersion=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>
теперь любой флажок, добавленный в макет, получает пользовательский стиль, и я могу изменить фон диалога, но флажки в диалоговом окне никоим образом не затрагиваются...
3 ответов
на самом деле вызов setMultiChoiceItems не приводит к виджетам флажков, а виджетам CheckedTextView. [Updated] также кажется, что изменение значения атрибута checkMark не имеет никакого эффекта. Однако, изменив значение атрибута listChoiceIndicatorMultiple для стиля CustomDialog, я смог изменить drawable для вариантов. Вот так:
<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 и обнаружив, что шаблон для элементов множественного выбора в диалоговом окне используется следующее:
все, что вы ищете можно найти в темах и стилях из документов, и применить атрибуты вашей темы с признаками в 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, у вас есть пользовательский флажок;)
надеюсь, это поможет, счастливое кодирование!
вы можете установить drawables для всех состояний флажка. Drawables могут быть изображениями или формами, поэтому вы можете установить любой фон, который хотите иметь.
1 > Сделайте два png-файла для проверенных и непроверенных состояний cb, как вы хотите, и сохраните их в папке drawable вашего приложения.
2 > Теперь сделайте один 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" />
решение работало для меня, чтобы изменить дисплей для одного флажка