Как изменить цвет флажка?


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

18 131

18 ответов:

Вы можете изменить CheckBox s drawable с помощью

вы можете покрасить непосредственно в xml. Используйте buttonTint для коробки: (начиная с уровня API 23)

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:buttonTint="@color/CHECK_COLOR" />

вы также можете сделать это с помощью appCompatCheckbox v7 для старых API:

<android.support.v7.widget.AppCompatCheckBox 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:buttonTint="@color/COLOR_HERE" /> 

вы можете установить android тему флажка, чтобы получить цвет, который вы хотите в ваших стилях.xml add:

<style name="checkBoxStyle" parent="Base.Theme.AppCompat">
    <item name="colorAccent">CHECKEDHIGHLIGHTCOLOR</item>
    <item name="android:textColorSecondary">UNCHECKEDCOLOR</item>
</style>

затем в файле layout :

<CheckBox
     android:theme="@style/checkBoxStyle"
     android:id="@+id/chooseItemCheckBox"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"/>

В отличие от использования android:buttonTint="@color/CHECK_COLOR" этот метод работает под Api 23

программная версия:

int states[][] = {{android.R.attr.state_checked}, {}};
int colors[] = {color_for_state_checked, color_for_state_normal}
CompoundButtonCompat.setButtonTintList(checkbox, new ColorStateList(states, colors));

используйте buttonTint и селектор цвета

<android.support.v7.widget.AppCompatCheckBox
                android:id="@+id/check"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:buttonTint="@color/checkbox_filter_tint"/>

res / colors / checkbox_filter_tint.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/light_gray_checkbox"
          android:state_checked="false"/>
    <item android:color="@color/common_red"
          android:state_checked="true"/>
</selector>
<CheckBox
            android:id="@+id/chk_remember_signup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:buttonTint="@android:color/white"
            android:text="@string/hint_chk_remember_me" />

добавьте эту строку в свой styles.xml file:

<style>
    <item name="android:colorAccent">@android:color/holo_green_dark</item>
</style>

Я бы предложил использовать подход к стилю в android в качестве способа настройки встроенных представлений android, добавить новый стиль в свой проект:

<style name="yourStyle" parent="Base.Theme.AppCompat">
    <item name="colorAccent">your_color</item> <!-- for uncheck state -->
    <item name="android:textColorSecondary">your color</item> <!-- for check state -->
</style>

и добавить присвоить этот стиль теме флажка: android: theme= "@style / youStyle"

надеюсь, что это помогает.

Я столкнулся с той же проблемой, я нашел выход с помощью ниже метод. Скопируйте btn_check.xml С android-sdk/platforms/android-#(version)/data/res/drawable в папку вашего проекта drawable и измените состояния изображения " on " и " off " на ваши пользовательские изображения.
Тогда ваш xml будет просто нужно android:button="@drawable/btn_check"

<CheckBox
    android:button="@drawable/btn_check"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:checked="true" />

если вы хотите использовать различные значки Android по умолчанию, вы можете использовать:

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

buttonTint работал для меня попробовать

android: buttonTint= "@color / white"

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:id="@+id/agreeCheckBox"
    android:text="@string/i_agree_to_terms_s"
    android:buttonTint="@color/white"
    android:layout_below="@+id/avoid_spam_text"/>

вы можете создать свой собственный 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>

Привет это код темы для темной темы и светлой темы.

<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" будет использоваться для изменения оттенка цвета кнопки действия в панели действий.Это обычай Атрибут в стиле.xml

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

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

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

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

мы можем изменить цвет флажка с помощью паленой строки кода

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

вы можете изменить цвет фона элемента <CheckBox> путем встраивания его в <LinearLayout>. Затем измените цвет фона <LinearLayout> для цвета вы хотите.

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

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

        }
    });

создать 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) в ваш .

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

<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-файл, созданный ранее.

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

вы можете использовать следующие два свойства в "цвета.XML-код"

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

colorControlNormal - для обычного представления флажка, а colorControlActivated - для того, когда флажок установлен.

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

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