Как изменить цвет CheckBox? - PullRequest
178 голосов
/ 02 мая 2011

Как изменить цвет по умолчанию CheckBox в Android?
По умолчанию цвет CheckBox зеленый, и я хочу изменить этот цвет.
Если это невозможно, скажите, пожалуйста, каксделать кастом CheckBox?

Ответы [ 20 ]

3 голосов
/ 18 августа 2018

Вы можете изменить checkbox цвет, используя одну строку кода

android:buttonTint="@color/app_color" //whatever color

2 голосов
/ 18 сентября 2016

вы можете создать свой собственный xml в drawable и использовать его как android: background = "@ drawable / your_xml"

в том, что вы можете дать краевой угол все

<item>
    <shape>
        <gradient

            android:endColor="#fff"
            android:startColor="#fff"/>
        <corners
            android:radius="2dp"/>
        <stroke
            android:width="15dp"
            android:color="#0013669e"/>

    </shape>
</item>

2 голосов
/ 01 ноября 2017

Привет Это код темы для Темной и Светлой тем.

<attr name="buttonsearch_picture" format="reference"/>
<attr name="buttonrefresh_picture" format="reference"/>

<style name="Theme.Light" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@color/white</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:textColorPrimary">@color/black</item>
    <item name="android:textColorSecondary">@color/black</item>
    <item name="android:textColor">@color/material_gray_800</item>
    <item name="actionOverflowButtonStyle">@style/LightOverflowButtonStyle</item>
    <item name="buttonsearch_picture">@drawable/ic_search_black</item>
    <item name="buttonrefresh_picture">@drawable/ic_refresh_black</item>
</style>

<style name="Theme.Dark" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@color/white</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:textColorPrimary">@color/white</item>
    <item name="android:textColorSecondary">@color/material_gray_500</item>
    <item name="android:textColor">@color/material_gray_800</item>
    <item name="actionOverflowButtonStyle">@style/DarkOverflowButtonStyle</item>
    <item name="buttonsearch_picture">@drawable/ic_search_white</item>
    <item name="buttonrefresh_picture">@drawable/ic_refresh_white</item>
    <item name="android:colorBackground">#ffffff</item>
    <item name="android:alertDialogTheme">@style/LightDialogTheme</item>
    <item name="android:alertDialogStyle">@style/LightDialogTheme</item>
  <!-- <item name="android:textViewStyle">@style/AppTheme.Widget.TextView</item>-->
    <item name="android:popupMenuStyle">@style/PopupMenu</item>
</style>

Если вы хотите изменить цвет флажка, то атрибут «colorAccent» будет использовать для отмеченного состояния, а «android: textColorSecondary» будетиспользуйте для снятия флажка.

"actionOverflowButtonStyle" будет использоваться для изменения цвета значка переполнения на панели действий.

Атрибут "buttonsearch_picture" будет использоваться для изменения оттенка цвета кнопки действий на панели действий.Это пользовательский атрибут в style.xml

<attr name="buttonsearch_picture" format="reference"/>

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

Атрибут "android: popupMenuStyle" используется для получения всплывающего окна Light.Стиль меню в Темной теме.

<style name="PopupMenu" parent="Theme.AppCompat.Light.NoActionBar">
</style>

И это код панели инструментов, который я использую в своем приложении Rocks Player.

 <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    app:contentInsetStart="0dp"
    android:title="Rocks Player"
    android:layout_width="match_parent"
    android:elevation="4dp"
    android:layout_height="48dp"
    app:layout_scrollFlags="scroll|enterAlways"
    android:minHeight="48dp"
    app:titleTextAppearance="@style/Toolbar.TitleText"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    android:background="?attr/colorPrimary"
    >
</android.support.v7.widget.Toolbar>

Темы: -

 <style name="AppTheme0" parent="Theme.Light">
    <item name="colorPrimary">#ffffff</item>
    <item name="colorPrimaryDark">#cccccc</item>
    <item name="colorAccent">#0294ff</item>
</style>

<style name="AppTheme1" parent="Theme.Dark">
    <item name="colorPrimary">#4161b2</item>
    <item name="colorPrimaryDark">#4161b2</item>
    <item name="colorAccent">#4161b2</item>
</style>
1 голос
/ 19 октября 2016

создайте xml Drawable resource file в res->drawable и назовите его, например, checkbox_custom_01.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item 
   android:state_checked="true"   
   android:drawable="@drawable/checkbox_custom_01_checked_white_green_32" />
  <item 
   android:state_checked="false" 
   android:drawable="@drawable/checkbox_custom_01_unchecked_gray_32" />
</selector>

Загрузите файлы изображений своих пользовательских флажков (я рекомендую png) в папку res->drawable.

Затем перейдите в файл макета и установите флажок на

<CheckBox
    android:id="@+id/checkBox1"
    android:button="@drawable/checkbox_custom_01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:text="CheckBox"
    android:textSize="32dip"/>

, вы можете настроить что угодно, если android:button указывает на правильный файл XML, созданный вами ранее.

Примечание для новичков: хотя это и не обязательно, тем не менее, хорошей практикой является присвоение вашему флажку уникального идентификатора во всем дереве макета.

0 голосов
/ 28 мая 2019

Используйте это для динамического изменения фона флажка в вашем Java-коде

// Установка цвета фона на флажок. checkbox.setBackgroundColor (Color.parseColor ( "# 00e2a5"));

Этот ответ был получен с этого сайта . Вы также можете использовать этот сайт , чтобы преобразовать цвет RGB в значение Hex, необходимое для подачи в parseColor

0 голосов
/ 22 октября 2018

100% надежный подход.

В моем случае у меня не было доступа к исходному файлу макета XML, поскольку я получаю Checkbox от сторонней библиотеки MaterialDialog. Поэтому я должен решить это программно.

  1. Создать ColorStateList в xml:

Рез / цвет / checkbox_tinit_dark_theme.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/white"
        android:state_checked="false"/>
    <item android:color="@color/positiveButtonBg"
        android:state_checked="true"/>
</selector>
  1. Затем примените его к флажку:

    ColorStateList darkStateList = ContextCompat.getColorStateList(getContext(), R.color.checkbox_tint_dark_theme);
    CompoundButtonCompat.setButtonTintList(checkbox, darkStateList);
    

P.S. Кроме того, если кому-то интересно, вот как вы можете получить свой флажок в диалоговом окне MaterialDialog (если вы установили его с помощью .checkBoxPromptRes(...)):

CheckBox checkbox = (CheckBox) dialog.getView().findViewById(R.id.md_promptCheckbox);

Надеюсь, это поможет.

0 голосов
/ 14 августа 2013

Вы должны попробовать код ниже. Это работает для меня.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/checked" 
          android:state_checked="true">
        <color android:color="@color/yello" />
    </item>
    <!-- checked -->
    <item android:drawable="@drawable/unchecked" 
          android:state_checked="false">
        <color android:color="@color/black"></color>
    </item>
    <!-- unchecked -->
    <item android:drawable="@drawable/checked" 
          android:state_focused="true">
        <color android:color="@color/yello"></color>
    </item>
    <!-- on focus -->
    <item android:drawable="@drawable/unchecked">
        <color android:color="@color/black"></color>
    </item>
    <!-- default -->
</selector>

и CheckBox

<CheckBox
    Button="@style/currentcy_check_box_style"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="20dp"
    android:text="@string/step_one_currency_aud" />
0 голосов
/ 23 апреля 2015

Если вы собираетесь использовать иконки андроида, как описано выше ..

android:button="@android:drawable/..."

.. это хороший вариант, но чтобы это работало - я обнаружил, что вам нужно добавить логику переключения, чтобы показать/ Скрыть флажок, как это:

    checkBoxShowPwd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        // checkbox status is changed from uncheck to checked.
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            int btnDrawable = android.R.drawable.checkbox_off_background;

            if (isChecked)
            {
                btnDrawable = android.R.drawable.checkbox_on_background;
            }

            checkBoxShowPwd.setButtonDrawable(btnDrawable);

        }
    });
0 голосов
/ 14 июня 2011

Вы можете изменить цвет фона <CheckBox>, вставив его внутрь <LinearLayout>.Затем измените цвет фона <LinearLayout> на нужный вам цвет.

0 голосов
/ 01 июля 2017

Вы можете использовать следующие два свойства в "colors.xml"

<color name="colorControlNormal">#eeeeee</color>
<color name="colorControlActivated">#eeeeee</color>

colorControlNormal для нормального просмотра флажка, а colorControlActivation для того, когда флажок установлен.

...