Android 更改单选按钮的圆圈颜色和文本颜色

Android change circle color and textColor of radio button

当我点击单选按钮时,我希望文本的颜色和圆圈的颜色同时改变时间如下图

注意

圆圈和文本的选择颜色是 colorPrimary 或 colorAccent 颜色的 none。

radiobutton.setOnCheckedChangeListener { buttonView, isChecked ->
        if(radiobutton.isChecked())
        {
            // Changing radio button 1 color on checked.
            radiobutton.setTextColor(Color.parseColor("#00ff00"))}}

如果您想同时更改圆圈的文本和颜色,请按照以下步骤操作

1.add 样式如下

<style name="radioButton" parent="AppTheme">
    <item name="colorControlNormal">#0f0</item>
    <item name="colorAccent">#f00</item>
  </style>

2.add 这个 selector.xml 到 drawable

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="#0f0" android:state_pressed="true" />
  <item android:color="#f00" android:state_checked="true" />
  <item android:color="#0f0" />
</selector>

3.add 选择器和样式到 RadioButton

 <RadioButton
            android:id="@+id/one"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="16dp"
            android:text="select"
            android:textColor="@drawable/selector"
            android:textSize="12sp"
            android:theme="@style/radioButton"
            app:useMaterialThemeColors="false" />

完整代码:

<RadioGroup
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_gravity="left"
          android:layout_margin="16dp"
          android:checkedButton="@+id/one"
          android:layoutDirection="ltr"
          android:orientation="horizontal">

          <RadioButton
            android:id="@+id/one"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="16dp"
            android:text="select"
            android:textColor="@drawable/selector"
            android:textSize="12sp"
            android:theme="@style/radioButton"
            app:useMaterialThemeColors="false" />

          <RadioButton
            android:id="@+id/two"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="not select"
            android:textColor="@drawable/selector"
            android:textSize="12sp"
            android:theme="@style/radioButton"
            app:useMaterialThemeColors="false" />
        </RadioGroup>

结果

注:我用的是GoogleMaterial

MaterialRadioButton 默认使用一个选择器,其中颜色基于 colorOnSurfaceuncheckedcolorControlActivatedchecked 在您的应用程序主题中定义.

您可以使用 android:theme 属性覆盖它们。 类似于:

<com.google.android.material.radiobutton.MaterialRadioButton
    ...
    android:theme="@style/ThemeOverlay.RadioButton"/>

与:

  <style name="ThemeOverlay.RadioButton" parent="">
    <item name="colorControlActivated">@color/.....</item>
    <item name="colorOnSurface">@color/.....</item>
    <item name="colorSurface">@color/.....</item>
  </style>

您还可以将 useMaterialThemeColors 属性设置为 false

<com.google.android.material.radiobutton.MaterialRadioButton
    ...
    useMaterialThemeColors="false"/>

并使用 CompoundButtonCompat#setButtonTintList 应用自定义选择器。

选择器如:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="..." android:state_enabled="true" android:state_checked="true"  />
  <item android:color="..." android:state_enabled="true" android:state_checked="false" />
  <item android:color="..." android:state_enabled="false" android:state_checked="true"  />
  <item android:color="..." android:state_enabled="false" android:state_checked="false" />  
</selector>