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
默认使用一个选择器,其中颜色基于 colorOnSurface
当 unchecked
和 colorControlActivated
当 checked
在您的应用程序主题中定义.
您可以使用 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>
当我点击单选按钮时,我希望文本的颜色和圆圈的颜色同时改变时间如下图
注意
圆圈和文本的选择颜色是 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
默认使用一个选择器,其中颜色基于 colorOnSurface
当 unchecked
和 colorControlActivated
当 checked
在您的应用程序主题中定义.
您可以使用 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>