CheckBox'ın rengi nasıl değiştirilir?


247

CheckBoxAndroid'de varsayılan rengi nasıl değiştiririm ?
Varsayılan olarak CheckBoxrenk yeşildir ve bu rengi değiştirmek istiyorum.
Mümkün değilse lütfen bana nasıl özel yapılacağını söyle CheckBox?


1
Yazı tipinin rengini değiştirmeye mi çalışıyorsunuz? Veya gerçek kutunun rengi?

1
gerçek kutu rengini değiştiriyorum
— Piyush

72
Ayarlamak android:buttonTint="@color/mybrown"kutu rengini değiştirmenin kolay bir yoludur.
— shauvik

6
Bunun @Shauvik sadece :) Malzeme tasarımı üzerinde çalışıyor
— Mücahit

9
@shauvik bunun app:buttonTint="@color/mybrown"yerine kullanmak daha iyidir , bu şekilde API <21 üzerinde çalışabilir
— Nikaoto

Yanıtlar:


187

Eğer senin minSdkVersion21+ kullanımıdır android:buttonTintbir onay kutusu rengini güncelleştirmek için özellik:

<CheckBox
  ...
  android:buttonTint="@color/tint_color" />

AppCompat kitaplığını kullanan ve 21'in altındaki Android sürümlerini destekleyen projelerde, buttonTintözelliğin uyumlu bir sürümünü kullanabilirsiniz :

<CheckBox
  ...
  app:buttonTint="@color/tint_color" />

Bu durumda bir alt sınıf istiyorsanız, bunun yerine CheckBoxkullanmayı unutmayın AppCompatCheckBox.

ÖNCEKİ YANIT:

Öznitelik CheckBoxkullanarak çekilebilir olanları değiştirebilirsiniz android:button="@drawable/your_check_drawable".


7
Kendi çekmeceni yaratmalısın. Daha basit bir yol
— olmalı

14
Renk değiştirme düğmesi Renk daha düz bir yoldur. Gereksiz yere özelleştirmek yerine yerel öğeleri kullanmalıyız.
— Neela

3
Not: Malzeme tasarımı stilleri için contentControlşimdi seçenekler var: materialdoc.com/components/selection-controls
— SimpsOff

392

Rengi doğrudan XML'de değiştirebilirsiniz. buttonTintKutu için kullanın : (API seviye 23'ten itibaren)

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

Bunu appCompatCheckbox v7daha eski API düzeyleri için kullanarak da yapabilirsiniz :

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

5
AppCompatCheckBox ... Teşekkürler. Bunu bilmiyordum.
— moskis

8
Güzel, teşekkürler! Ve ana / ebeveyn düzeninize xmlns: app = " schemas.android.com/apk/res-auto " eklemeyi unutmayın
— Alberto Méndez

2
Benim için çalışmıyor 'android.support.v7.widget.AppCompatCheckBox'
— Zvi

1
Bu, mizanpajlarınızda CheckBox'ı kullandığınızda otomatik olarak kullanılacaktır. Bu sınıfı yalnızca özel görünümler yazarken manuel olarak kullanmanız gerekir.
— 최봉재

2
İşaretli ve işaretsiz durumlar için 2 farklı renk ayarlamaya ne dersiniz?
— DYS

130

stillerinizde istediğiniz rengi elde etmek için onay kutusunun android temasını ayarlayabilirsiniz. xml ekle:

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

ardından düzen dosyanızda:

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

android:buttonTint="@color/CHECK_COLOR"Bu yöntemi kullanmanın aksine Api 23 altında çalışır


5
TEXTCOLORSECONDARY !!!! Teşekkür ederim dostum! Bu kadar. Seçilmemiş arka plan rengini değiştirmek için yaş aradım ve özel çekmecelerle çalışmak istemedim. Budur!
— Mulgard

@Mulgard yardım edebildiğim için memnunum!
— Amro elaswar

2
Benim için çalıştı, ancak metni görebilmek için CheckBox xml eklemek gerekiyor - android: textColor = "@ color / textColor"
— Zvi

Programlı olarak nasıl yaparım?
— Zvi

@Zvi Bunu programlı olarak yapabileceğinizden emin değilim
— Amro elaswar

48

Programlı sürüm:

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

1
Sayende. Sen kayalar, daha iyi bir çözüm.
— Carlos

bana renklerle beklenmedik bir sonuç verdi, hiçbir şeyi karıştırmadığınızdan emin misiniz?
— Kirill Karmazin

@Carlos Bu "daha iyi" bir çözüm değildir, çünkü android'de her zaman xml dosyasındaki tüm düzen öğelerini ayarlamaya çalışmalısınız ve dinamik olarak değiştirmeniz gerektiğinde programlı olarak değil
— kyay

@kyay "Her zaman" değil ... Android kaynak sistemi bir karışıklıktır ve genellikle programlı olarak yapmak çok daha kolay ve daha sürdürülebilir.
— nyholku

Bu tür endişelerin ayrılmasına yardımcı olur
— kyay

42

buttonTint21'den fazla API sürümü için düğme ve renk seçicinin rengini değiştirmek için kullanın .

<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"
                tools:targetApi="21"/>

res / renkler / 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>

3
İngilizce biliyor ve cevap plse açıklayabilir
— GGO

Her zaman SO ile İngilizce ile sopa.
— nyconing

Daha iyi bir cevap
— Vivek A Naik

Bu, tüm cihazlarda çalışan hem kontrol edilen hem de kontrol edilmeyen renkleri ayarlamak için tek basit yaklaşım gibi görünüyor.
— Gumby The Green

Bu kabul edilen cevap olmalı. Seçici valueskaynak olarak bildirildiğinde çalışmadığı unutulmamalıdır . Yukarıda gösterilen yolla belirtildiği gibi, colorskaynak klasörünün içinde olması gerekir .
— Benjamin Basmaci

18

Android'de o stil yaklaşımını yerleşik android görünümlerini yapılandırmanın, projenize yeni stil eklemenin bir yolu olarak kullanmanızı öneririm:

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

ve bu stili onay kutusunun temasına ekleyin: android: theme = "@ style / youStyle"

Bu yardımcı olur umarım.


Bu çözümü kabul edin, bu özellikler varsayılan yerleşik android bileşeniyle daha iyi çalışmalıdır.
— Trung Le

1
Bu, Amro elaswar'ın 9 ay önceki cevabının tekrarı.
— jk7

GERÇEK BİR ÇÖZÜM bu tür bir çözümdür.
— Iharob Al Asimi

16

Xml'nize buttonTint ekle

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

2
Bu cevabın içeriği afathman'ın cevabında zaten var .
— MTCoster

10

Bu satırı styles.xmldosyanıza ekleyin :

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

Lütfen cevabınızı örneğinizle düzenleyin ve bir yorum olarak yayınlamayın
— bish

4
Hafif düzeltme: Bu <item name = " android : colorAccent> </item> Ayrıca, bu sadece API 21 ve üstü için kullanılabilir.
— user3829751

Bu renk değiştirir, sorulduğu gibi değil
— Alberto M

1
Galaxy S3'te bir CheckBox'ın yalnızca işaretli durumunu değiştirir. Fakat kontrolsüz durum hala aynı.
— Slava

9

buttonTint benim için çalıştı

android: buttonTint = "renk @ / beyaz"

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

8

Aynı sorunla karşı karşıya kaldım, aşağıdaki tekniği kullanarak bir çözüm buldum. Kopya btn_check.xmlgelen android-sdk/platforms/android-#(version)/data/res/drawableprojenizin çekilebilir klasörüne ve özel görüntülere imaj devletler 'kapalı' 'açık' ve değiştirin.
O zaman xml'nizinandroid:button="@drawable/btn_check"

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

Farklı varsayılan Android simgeleri kullanmak istiyorsanız şunları kullanabilirsiniz:

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

Harika cevap - özel xml oluşturmaktan çok daha kolay .. teşekkürler! Benim için gri bir arka planım var ve onay kutusu kenarlığı görünmüyordu. Bunu ekledim ve şimdi görebilirsiniz: android: button = "@ android: drawable / checkbox_off_background"
— Gene Bo

1
Aslında bu yaklaşımı kullanmaktan fark ettiğimden biraz daha fazlası var ama yine de güzel bir seçenek. Aşağıda ayrıntıları ekledim stackoverflow.com/a/29831532/2162226
— Gene Bo

5

Tek bir checkboxkod satırı kullanarak rengi değiştirebilirsiniz

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


4

% 100 sağlam yaklaşım.

Benim durumumda, XML düzen kaynak dosyasına erişemedim, çünkü 3'üncü taraf bir MaterialDialog lib'den Checkbox'ı aldım. Bu yüzden bunu programlı olarak çözmem gerekiyor.

  1. Xml'de bir ColorStateList oluşturun:

res / color / 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. Ardından onay kutusuna uygulayın:

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

PS Buna ek olarak, ilgilenen biri varsa, MaterialDialog iletişim kutusundan onay kutunuzu nasıl edinebileceğiniz aşağıda açıklanmıştır .checkBoxPromptRes(...):

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

Bu yardımcı olur umarım.


3

Drawable resource filealtında bir xml oluşturun res->drawableve adlandırın, örneğin,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>

Özel onay kutusu görüntü dosyalarınızı (png'yi öneririm) res->drawableklasörünüze yükleyin .

Ardından düzen dosyanıza gidin ve onay kutunuzu şununla değiştirin:

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

daha android:buttonönce oluşturduğunuz doğru XML dosyasını işaret ettiği sürece herhangi bir şeyi özelleştirebilirsiniz .

HABERLERE NOT: Zorunlu olmasa da, onay kutunuzu tüm düzen ağacınız boyunca benzersiz bir kimlikle adlandırmak iyi bir uygulamadır.


3

Merhaba Bu, hem Koyu Tema hem de Açık Tema için tema kodudur.

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

Onay kutusu rengini değiştirmek isterseniz, "colorAccent" özniteliği işaretli durum için ve "android: textColorSeincil" seçeneği, işaretleme durumu için kullanır.

"actionOverflowButtonStyle", Eylem çubuğundaki taşma simgesinin rengini değiştirmek için kullanılır.

"buttonsearch_picture" özniteliği, Eylem Çubuğu'ndaki İşlem Düğmesinin renk tonunu değiştirmek için kullanılır.Bu, style.xml dosyasındaki özel Özniteliktir

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

Aynı benim app kullanıyorum yenileme düğmesi içindir.

"android: popupMenuStyle" özelliği Karanlık tema Işık tema açılır menü stilini almak için kullanıyor.

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

Ve bu, Rocks Player Uygulamamda kullandığım araç çubuğu Kodu.

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

Temalar: -

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

2

çekilebilir içinde kendi xml oluşturabilir ve bunu android olarak kullanabilirsiniz: background = "@ drawable / your_xml"

sınır köşesine her şeyi verebilmen için

<item>
    <shape>
        <gradient

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

    </shape>
</item>


1
Çekilebilir vektör grafikleri hakkında bilgi sahibi olmak iyi olsa da, bu cevap OP'nin düğme tonu hakkındaki sorusunu cevaplamıyor.
— Mike Poole

2

"Colors.xml" dosyasında aşağıdaki iki özelliği kullanabilirsiniz

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

colorControlNormal onay kutusunun normal görünümü içindir ve colorControlActivated onay kutusunun işaretli olduğu zamandır.


1

<CheckBox>Öğesinin arka plan rengini a içine yerleştirerek değiştirebilirsiniz <LinearLayout>. Ardından arka plan rengini <LinearLayout>istediğiniz renge değiştirin .


Soru, onay kutusunun rengi hakkında ve arka plan hakkında değil
— Zvi

1

Aşağıdaki kodu denemelisiniz. Benim için çalışıyor.

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

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

1

Yukarıda açıklandığı gibi android simgeleri kullanacaksanız ..

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

.. bu güzel bir seçenek, ama bunun çalışması için - onay işaretini göstermek / gizlemek için geçiş mantığı eklemeniz gerektiğini buldum:

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

        }
    });

Bu gerçekten gerekli olmayan ekstra bir iş. Çekmecenin xml dosyasında, seçicinin açık veya kapalı çekilebilir kaynaklarına referans sağlarsınız. Bu, onay kutusunun durumuna göre doğru çekilebilirliği otomatik olarak koyar.
— jkincali

0

Çoğu yanıt xml dosyasından geçer. Çoğu Android sürümü için etkin bir cevap bulursanız ve iki durum için sadece bir renk iseniz UnCheck'i kontrol edin: İşte benim çözümüm:

Kotlin:

val colorFilter = PorterDuffColorFilter(Color.CYAN, PorterDuff.Mode.SRC_ATOP)
CompoundButtonCompat.getButtonDrawable(checkBox)?.colorFilter = colorFilter

Java:

ColorFilter colorFilter = new PorterDuffColorFilter(Color.CYAN, PorterDuff.Mode.SRC_ATOP);
Drawable drawable = CompoundButtonCompat.getButtonDrawable(checkBox);
if (drawable != null) {
    drawable.setColorFilter(colorFilter);
}

-1

Renkleri programlı olarak ayarlamanın çok daha kolay bir yolu vardır. Aşağıdaki yöntemi kullanın, Checkbox.setButtonTintList (ColorStateList.valueOf (getContext (). GetColor (R.color.yourcolor)))


-2

Java kodunuzda Checkbox'ın arka planını dinamik olarak değiştirmek için aşağıdaki kod satırlarını kullanabilirsiniz.

//Setting up background color on checkbox.
 checkbox.setBackgroundColor(Color.parseColor("#00e2a5"));

Bu cevap bu siteden . Bu siteyi RGB renginizi Hex değerine dönüştürmek için de kullanabilirsiniz , parseColor'u beslemeniz gerekir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.