从RadioButton,android中删除涟漪效应?

时间:2016-03-04 10:43:24

标签: android

我自定义了一个RadioButton,用于在右侧添加radiobutton图像

<RadioButton
                android:layout_margin="20dp"
                android:drawableRight="@drawable/custom_btn_radio"
                android:button="@null"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Invite Only"/> 

custom_btn_radio.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/check_box" android:state_checked="false"/>
    <item android:drawable="@drawable/close_btn" android:state_checked="true"/>
</selector>
但是,radiobutton的涟漪效应也增大了。如何从RadioButton中消除涟漪效应?以及如何自定义涟漪效应?

提前谢谢你。

4 个答案:

答案 0 :(得分:30)

将RadioButton背景设为透明

android:background="@android:color/transparent"

{{1}}

答案 1 :(得分:0)

{{1}}

答案 2 :(得分:0)

colorControlHighlightcolorControlActivated设置为透明颜色可以为我解决此问题:

<style name="transparent_theme">
    <item name="colorControlHighlight">@android:color/transparent</item>
    <item name="colorControlActivated">@android:color/transparent</item>
</style>

答案 3 :(得分:0)

在“如何自定义波纹效果”部分上,使用Material Components库v1.1.0,默认情况下背景为RippleDrawable,其颜色设置为2种颜色的ColorStateList:A 26 alpha(十六进制#A1)colorControlActivated处于启用和检查状态,默认状态下为alpha白色或黑色,具体取决于您是浅色主题(#1F000000)还是深色主题(#33FFFFFF)。我只是通过在调试器中检查MaterialCheckBox的背景来检索此信息的。

您可以只使用RippleDrawable方法覆盖setColor的颜色。例如,如果您只想在使用DayNight主题时更改波纹效果的强调色部分,则可以运行以下Kotlin代码示例:

private val RIPPLE_ENABLED_CHECKED_STATES = arrayOf(
        intArrayOf(android.R.attr.state_enabled, android.R.attr.state_checked),
        intArrayOf())

fun Int.withAlpha(alpha: Int): Int {
    require(alpha in 0..0xFF)
    return this and 0x00FFFFFF or (alpha shl 24)
}

fun CompoundButton.changeCheckedRippleColor(@ColorInt color: Int) {
    val defaultAlphaColor= if (context.resources.configuration.uiMode and 
                Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES)
            Color.WHITE.withAlpha(51)
        else
            Color.BLACK.withAlpha(31)
    (background as? RippleDrawable)?.setColor(ColorStateList(RIPPLE_ENABLED_CHECKED_STATES,
                intArrayOf(color.withAlpha(26), defaultAlphaColor)))
}