เปลี่ยนสีวงกลมของปุ่มตัวเลือก


158

ฉันต้องการเปลี่ยนสีของวงกลมของRadioButtonในหนึ่งในโครงการของฉันฉันไม่เข้าใจว่าจะตั้งค่าคุณสมบัติใด สีพื้นหลังที่ฉันเป็นสีดำทำให้มองไม่เห็น ฉันต้องการตั้งค่าสีของวงกลมเป็นสีขาว


อ้างอิงลิงค์นี้: heliodorj.blogspot.in/2009/04/…
นักพัฒนา Android

ใช้รูปภาพสองรูปสำหรับปุ่มตัวเลือกที่เลือกไว้และอีกรูปหนึ่งไม่ได้เลือกภาพนี้ใน Radiobutton คลิกโดยใช้ทรัพยากร setbackground หรือโดยใช้ตัวเลือก xml
SAURABH_12

คำตอบ:


288

ง่ายขึ้นเพียงตั้งค่าปุ่มสีอ่อน: (ใช้ได้กับ api ระดับ 21 ขึ้นไปเท่านั้น)

<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:checked="true"
    android:buttonTint="@color/your_color"/>

ในค่า / colors.xml ใส่สีของคุณในกรณีนี้สีแดง:

<color name="your_color">#e75748</color>

ผลลัพธ์:

ปุ่มตัวเลือก Android สี

หากคุณต้องการทำตามรหัส (เช่น api 21 ขึ้นไป):

if(Build.VERSION.SDK_INT>=21)
{

    ColorStateList colorStateList = new ColorStateList(
            new int[][]{

                    new int[]{-android.R.attr.state_enabled}, //disabled
                    new int[]{android.R.attr.state_enabled} //enabled
            },
            new int[] {

                    Color.BLACK //disabled
                    ,Color.BLUE //enabled

            }
        );                       


    radio.setButtonTintList(colorStateList);//set the color tint list
    radio.invalidate(); //could not be necessary
}

1
@emaillenin ถ้าคุณต้องการที่จะเปลี่ยนสีสีตามรหัสที่คุณควรใช้control.getDrawable().setColorFilter(getResources().getColor(color), PorterDuff.Mode.SRC_IN);ที่controlการควบคุมที่คุณต้องการที่จะเปลี่ยนสีและcolorเป็นค่าจำนวนเต็มของสีที่คุณต้องการเช่นR.color.red
Jorge Arimany

1
@JorgeArimany สำหรับ RadioButton มันคือ getButtonDrawable หรือ getCompoundDrawables หรือไม่? getCompoundDrawables ส่งคืนรายการ
Lenin Raj Rajasekaran

@emaillenin ขอบคุณคำตอบของฉันสำหรับความคิดเห็นของคุณสำหรับการควบคุมอื่น ๆ เช่นปุ่มฉันได้อัพเกรดคำตอบของฉันโดยการเพิ่มรหัสที่คุณกำลังมองหาหวังว่าจะช่วยให้คุณ
Jorge Arimany

3
@JorgeArimany ฉันได้ทำงานให้> 21 แล้ว .. ฉันกำลังมองหาคำตอบเฉพาะสำหรับ <21
Lenin Raj Rajasekaran

ในการเปลี่ยนสีของปุ่มที่เลือกคุณสามารถเพิ่มหรือแทนที่สถานะด้วยandroid.R.attr.state_checkedและเพิ่มสีได้
6rchid

160

อัปเดต: 1. ใช้อันนี้แทน

   <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rbtn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:buttonTint="@color/primary" />

2. จากนั้นเพิ่มบรรทัดนี้ลงในเค้าโครงหลักหรือAlt + Enterใน Android Studio เพื่อเพิ่มอัตโนมัติ xmlns:app="http://schemas.android.com/apk/res-auto"

ตัวอย่างขั้นต่ำควรมีลักษณะเช่นนี้:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rbtn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:buttonTint="@color/primary" />

</LinearLayout>

3. ในโปรแกรมของคุณควรเรียกเช่นนี้ AppCompatRadioButton radioButton = (AppCompatRadioButton) view.findViewById(R.id.rbtn_test);

โดยทั่วไปแล้วรูปแบบประเภทนี้สามารถใช้ได้กับ AppCompact ทุกประเภทเช่น AppCompatCheckBox, AppCompatButton และอื่น ๆ

คำตอบเก่า:

เพื่อสนับสนุนด้านล่างหุ่นยนต์ API 21 คุณสามารถใช้AppCompatRadioButton จากนั้นใช้setSupportButtonTintListวิธีการเปลี่ยนสี นี่คือข้อมูลโค้ดของฉันเพื่อสร้างปุ่มตัวเลือก

    AppCompatRadioButton rb;
    rb = new AppCompatRadioButton(mContext);

    ColorStateList colorStateList = new ColorStateList(
            new int[][]{
                    new int[]{-android.R.attr.state_checked},
                    new int[]{android.R.attr.state_checked}
            },
            new int[]{

                    Color.DKGRAY
                    , Color.rgb (242,81,112),
            }
    );
    rb.setSupportButtonTintList(colorStateList);

ผลการทดสอบที่ API 19:

อันนี้ถูกทดสอบบน API 19

ดูลิงค์อ้างอิง android สำหรับรายละเอียดเพิ่มเติม


10
คำตอบนี้ควรเป็นคำตอบที่ยอมรับได้ หากคุณต้องการเพิ่มปุ่มตัวเลือกการสนับสนุนนี้ผ่าน xml ให้ใช้<android.support.v7.widget.AppCompatRadioButton ../>
Vinayak Garg

22
setSupportButtonTintListเป็นวิธีส่วนตัวที่คุณไม่ต้องการใช้ ปุ่มตัวเลือกจะทำงานผิดปกติบน Android บางรุ่น CompoundButtonCompat.setButtonTintList(rb, colorStateList)แต่การใช้งาน
wampastompa

2
@wampastompa ถูกต้อง ใน API 22 ผลลัพธ์คือฉันเห็นเฉพาะวงกลมด้านนอกไม่เต็มเมื่อตรวจสอบ @aknay; โปรดอัปเดตคำตอบของคุณ
Nino van Hooff

1
ฉันใช้ API 16 ฉันเพิ่มปุ่มตัวเลือกของ AppCompat Radio ตามที่ระบุไว้ด้านบน แต่ยังคงแสดงผลไม่ถูกต้อง
tccpg288

1
คุณไม่ต้องการรหัสใด ๆ ดูคำตอบของ IgorOliveira ใช้งานได้กับทุกรุ่น
คิริลล์คาร์มาซิน

77
<android.support.v7.widget.AppCompatRadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:buttonTint="@color/Color" />

11
นี่คือคำตอบสำหรับอุปกรณ์ก่อนปัจจุบันและโพสต์ lollypop !! ยอดเยี่ยม
sdelvalle57

1
นี่ควรเป็นคำตอบที่ยอมรับได้ สั้นและสมบูรณ์แบบ หมายเหตุ: ใช้แอพ: buttonTint = "@ color / Color" แต่ไม่ andoid: buttonTint = "@ color / Color"!
คิริลล์คาร์มาซิน

@KirillKarmazin ยอมรับแล้วควรใช้กับ <21
user924

56

ทำงานกับ API ก่อน 21 เช่นเดียวกับโพสต์ 21 ในตำแหน่งของคุณstyles.xml:

<!-- custom style -->
<style name="radionbutton"
       parent="Base.Widget.AppCompat.CompoundButton.RadioButton">
    <item name="android:button">@drawable/radiobutton_drawable</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>

radio buttonxml ของคุณควรมีลักษณะดังนี้:

<RadioButton
    android:layout_width="wrap_content"
    style="@style/radionbutton"
    android:checked="false"
    android:layout_height="wrap_content"
    />

ตอนนี้สิ่งที่คุณต้องทำคือการทำในของคุณradiobutton_drawable.xml drawable folderนี่คือสิ่งที่คุณต้องใส่ใน:

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

ของคุณradio_unchecked.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="oval">
  <stroke android:width="1dp" android:color="@color/colorAccent"/>
  <size android:width="30dp" android:height="30dp"/>
</shape>

ของคุณradio_checked.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="oval">
      <stroke android:width="1dp" android:color="@color/colorAccent"/>
      <size android:width="30dp" android:height="30dp"/>
    </shape>
  </item>
  <item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
    <shape android:shape="oval">
      <solid android:width="1dp" android:color="@color/colorAccent"/>
      <size android:width="10dp" android:height="10dp"/>
    </shape>
  </item>
</layer-list>

เพียงแทนที่@color/colorAccentด้วยสีที่คุณเลือก


ฉันจะทำสิ่งนี้โดยทางโปรแกรมได้อย่างไร
tccpg288

@ tccpg288 ถ้าคุณใช้ xml นี้และหากคุณต้องการเปลี่ยนสีโดยทางโปรแกรมให้ใช้ radioButton.setChecked (false) หรือ radioButton.setChecked (จริง)
Vaibhav Sharma

ฉันไม่เข้าใจคำถามของคุณ คุณช่วยอธิบายรายละเอียดได้ไหม?
Vaibhav Sharma

ความผิดพลาดของฉันมันจะสำคัญหรือไม่ถ้าฉันใช้ RadioButton ปกติหรือ AppCompat RadioButton
tccpg288

1
มันไม่ทำงานจะเกิดอะไรขึ้นเมื่อฉันเริ่มต้น RadioButton? นี่คือรหัสของฉัน: mPollAnswerArrayList.add ((indexCreated), RadioButton ใหม่ ((getActivity (). getApplicationContext ()), null, R.style.radiobutton));
tccpg288

18

คุณต้องใช้รหัสนี้:

<android.support.v7.widget.AppCompatRadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:buttonTint="@color/black"
                    android:text="Radiobutton1"
                    app:buttonTint="@color/black" />

ใช้app:buttonTintแทนandroid:buttonTintและandroid.support.v7.widget.AppCompatRadioButtonแทนRadiobutton!


16
  1. ประกาศสไตล์ที่กำหนดเองในไฟล์ styles.xml ของคุณ

    <style name="MyRadioButton" parent="Theme.AppCompat.Light">  
      <item name="colorControlNormal">@color/indigo</item>
      <item name="colorControlActivated">@color/pink</item>
    </style>  
  2. ใช้สไตล์นี้กับ RadioButton ของคุณผ่าน android: คุณสมบัติของชุดรูปแบบ

    <RadioButton  
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="Radio Button"
        android:theme="@style/MyRadioButton"/>

    เฉพาะในกรณีที่กิจกรรมของคุณขยาย AppCompatActivity


1
ควรได้รับการยอมรับว่าเป็นคำตอบมันทำงานได้ในทุกรุ่นและมันก็สะอาด
Antonis Radz

ฉันต้องใช้<item name="android:colorControlActivated">@color/pink</item>มันเพื่อทำงานให้ฉัน ฉันยังไม่แน่ใจว่าทำไม มิฉะนั้นนี่เป็นคำตอบที่ดี
Taylor Venissat

16

สำหรับภายใต้ API 21

สร้างสไตล์ที่กำหนดเอง RadioButton style.xml

 <style name="RadioButton" parent="Theme.AppCompat.Light">
     <item name="colorAccent">@color/green</item>
     <item name="android:textColorSecondary">@color/mediumGray</item>
     <item name="colorControlNormal">@color/red</item>
 </style>

ในการใช้ชุดรูปแบบ:

<RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:theme="@style/RadioButton" />

สำหรับ API 21 และอื่น ๆ

เพียงใช้ buttonTint

 <RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:buttonTint="@color/green" />

ควรมีความกระจ่าง: buttonTint ใช้งานได้กับ API 21 และแอปที่ใช้ AppCompat / AndroidX ไม่ว่า API จะเป็นอย่างไร
Chisko

12

คำถามนั้นเก่า แต่ฉันคิดว่าคำตอบของฉันจะช่วยผู้คน คุณสามารถเปลี่ยนสีของสถานะไม่ถูกตรวจสอบและตรวจสอบปุ่มได้โดยใช้สไตล์ใน xml

<RadioButton
    android:id="@+id/rb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@style/RadioButtonStyle" />

ใน style.xml

<style name="RadioButtonStyle" parent="Theme.AppCompat.Light">
        <item name="colorAccent">@android:color/white</item>
        <item name="android:textColorSecondary">@android:color/white</item>
</style>

คุณสามารถตั้งค่าสีที่ต้องการในสไตล์นี้


ชุดรูปแบบภายใน RadioButton ไม่ทำงาน (อีกต่อไป?) มันขัดข้องขณะคลิกปุ่มเนื่องจากไม่พบวิธีการ onClick แม้ว่าจะอยู่ที่นี่ก็ตาม
Bevor

ปัญหานี้จะมีเหตุผลอื่น ตรวจสอบให้แน่ใจว่าคุณได้รับ ID ของมุมมองที่ถูกต้องก่อนนำ onClick ไปใช้กับมุมมองนั้น
Jaura


7

ฉันทำให้มันสั้นแบบนี้ (ทำงานกับ API ก่อน 21 รวมทั้งโพสต์ 21)

ปุ่มตัวเลือกของคุณใน xml ควรมีลักษณะเช่นนี้

  <RadioButton android:id="@+id/radioid"                    
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"                 
                android:button="@drawable/radiodraw" />

ใน radiodraw.xml

  <?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">    
      <item android:state_checked="false" >
          <shape  android:shape="oval" >
              <stroke android:width="1dp" android:color="#000"/>
              <size android:width="30dp" android:height="30dp"/>
              <solid android:color="@android:color/transparent"/>
          </shape>
      </item>
      <item android:state_checked="true">
          <layer-list>
              <item>
                  <shape android:shape="oval">
                      <stroke android:width="1dp" android:color="#000"/>
                      <size android:width="30dp" android:height="30dp"/>
                      <solid android:color="@android:color/transparent"/>
                  </shape>
              </item>
              <item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
                  <shape android:shape="oval">
                      <solid android:width="1dp" android:color="#000"/>
                      <size android:width="10dp" android:height="10dp"/>
                  </shape>
              </item>
          </layer-list>
      </item>
  </selector>

ต้องเพิ่มสีโปร่งใสสำหรับการวาดสถานะไม่ถูกตรวจสอบมิฉะนั้นมันจะวาดรูปวงรีสีดำทึบ


6

บางครั้งคุณต้องแทนที่colorControlNormalเช่นนี้:

    <style name="RadioButtonStyle" parent="AppTheme">
       <item name="colorControlNormal">@color/pink</item>
       <item name="colorAccent">@color/colorPrimary</item>
       <item name="android:textColorSecondary">@color/black</item>
    </style>

และคุณจะได้รับปุ่มแบบนี้:

ป้อนคำอธิบายรูปภาพที่นี่

colorControlNormalใช้สำหรับสถานะไม่ถูกตรวจสอบและcolorAccentสำหรับการตรวจสอบ


5

มีแอตทริบิวต์ xml สำหรับมัน:

android:buttonTint="yourcolor"

ตรวจสอบให้แน่ใจนาที API ของคุณเป็นที่สูงขึ้นแล้ว 21 หรือนี้จะไม่ทำงาน
Jcorretjer

คุณสามารถใช้สิ่งนี้เพื่อความเข้ากันได้แบบย้อนหลัง: แอพ: buttonTint = "your_color"
Mridul Das

"Make sure your min API is higher then 21 or this won't work"นั่นคือเท็จ ฉันกำลังกำหนดเป้าหมาย API 17 ด้วย AndroidX และนี่เป็นสิ่งเดียวที่ทำงานให้ฉัน
Chisko

3

สำหรับผู้ที่ต้องการเปลี่ยนปิดการใช้งานตรวจสอบและเปิดใช้งานสถานะคุณ cat ทำตามขั้นตอนต่อไปนี้:

<!-- Or androidX radio button or material design radio button -->
<android.support.v7.widget.AppCompatRadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:buttonTint="@color/black"
                    android:text="Radiobutton1"
                    app:buttonTint="@color/radio_button_color" />

จากนั้นในโฟลเดอร์ res color ให้ไฟล์ชื่อ "radio_button_color.xml":

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/yellow900" android:state_selected="true" />
    <item android:color="@color/yellow800" android:state_checked="true" />
    <item android:color="@color/gray800" android:state_enabled="false" />
    <item android:color="@color/yellow800" android:state_enabled="true" />
</selector>

2
<RadioButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/radio"
    android:buttonTint="@color/my_color"/>

ปุ่มทั้งหมดจะเปลี่ยนสีกล่องวงกลมและตรวจสอบกลาง


1
แต่ไม่ใช่ระลอก ;-)
Waza_Be

1

RadioButton ตามค่าเริ่มต้นจะใช้สีของ colorAccent ในไฟล์ res / values ​​/ colors.xml ดังนั้นไปที่ไฟล์นั้นและเปลี่ยนค่าของ

<color name="colorAccent">#3F51B5</color>

เป็นสีที่คุณต้องการ


0

วิธีที่ง่ายที่สุดคือเปลี่ยน colourAccentสีvalues->colours.xml
แต่ระวังว่ามันจะเปลี่ยนสิ่งอื่นเช่นแก้ไขสีเคอร์เซอร์ข้อความ ฯลฯ

< color name="colorAccent">#75aeff</color >


0

หากคุณต้องการตั้งค่าสีที่แตกต่างสำหรับปุ่มตัวเลือกที่ถูกคลิกและไม่แสดงให้ใช้:

   android:buttonTint="@drawable/radiobutton"  in xml of the radiobutton and your radiobutton.xml will be:  
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#1E88E5"/>
<item android:state_checked="true" android:color="#00e676"/>
<item android:color="#ffffff"/>



0

ฉันมีปัญหานี้ หากแอปของคุณมีพื้นหลังสีดำและคุณมี RadioButtons จำนวนมากที่มองไม่เห็นเนื่องจากพื้นหลังมีความซับซ้อนในการแก้ไข android: buttonTint ของแต่ละอันทางออกที่ดีที่สุดคือเปลี่ยนธีมหลักในไฟล์ styles.xml ของคุณ

ฉันเปลี่ยน

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

ถึง

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

ดังนั้นวงกลม RadioButtons จึงกลายเป็นสีเทาจางลงและตอนนี้พวกมันสามารถมองเห็นได้แม้มีพื้นหลังสีดำ

นี่คือไฟล์ style.xml ของฉัน:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>


-4

@ jh314 ถูกต้อง ใน AndroidManifest.xml

 <application
    android:allowBackup="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"></application>

ใน style.xml

  <!-- Application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorAccent">@color/red</item>
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

ชื่อรายการจะต้องเป็น colorAccent โดยจะตัดสินใจสีเริ่มต้นของวิดเจ็ตของแอปพลิเคชัน

แต่ถ้าคุณต้องการเปลี่ยนสีในรหัสคำตอบของ @ @ อาจจะไม่ถูกต้อง


สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม เมื่อคุณมีเพียงพอชื่อเสียงคุณจะสามารถที่จะแสดงความคิดเห็นในโพสต์ใด ๆ ; แทนที่จะให้คำตอบที่ไม่จำเป็นต้องชี้แจงจากผู้ถาม - จากการรีวิว
semirturgay

คำตอบของฉันคือเปลี่ยนสีพื้นฐานของแอพและแน่นอนว่ามันสามารถเปลี่ยนสีของ radiobutton เป็นสีขาวได้
Iturbo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.