it-swarm.com.ru

Пользовательский стиль флажка в диалоге

Я создаю диалог с элементами с множественным выбором (флажки):

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>

Теперь любой флажок, добавленный к макету, получает собственный стиль, и я могу изменить фон диалога, но флажки в диалоге никак не меняются ...

13
yprez

На самом деле, вызов setMultiChoiceItems приводит не к виджетам CheckBox, а к виджетам CheckedTextView. [Обновлено] Также кажется, что изменение значения атрибута checkMark не имеет никакого эффекта. Однако, изменив значение атрибута listChoiceIndicatorMultiple для стиля CustomDialog, я смог изменить рисование для выбора. Как это: 

<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

Все, что вы ищете, можно найти в Темах и стилях из документов , и применить атрибуты вашей темы с найденными атрибутами в 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

вы можете установить drawables для всех состояний флажка. Рисунками могут быть рисунки или фигуры, поэтому вы можете установить любой фон, какой захотите.

1> создайте два png-файла для состояний cb check и unchecked так, как вы этого хотите, и сохраните их в папке 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" />

решение сработало для меня, чтобы изменить отображение для одного флажка

0
Karan Mer