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.