Search code examples
androidmaterial-components-androidmaterial-componentsandroid-chips

Can't change com.google.android.material.chip.Chip change press color


I programmatically Chips (Material Components), use setChipBackgroundColor change chip state press color but it's have two press color effect, i want to remove default press gray color

  1. my custom press (#daecff)
  2. default press color (gray)

thanks

https://i.sstatic.net/tGIUM.jpg

Chip chip = new Chip(context);
chip.setText(name);
chip.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
chip.setTextColor(ContextCompat.getColor(context, R.color.chip_color));
chip.setOnClickListener(onClickListener);
chip.setChipStrokeColorResource(R.color.chip_color);
chip.setChipStrokeWidth(5);
chip.setChipBackgroundColor(
    ContextCompat.getColorStateList(context, R.color.bg_chip)
);
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" android:color="#daecff"/>
    <item android:color="@color/white"/>

</selector>

Solution

  • You have to use the setRippleColor method:

    chip.setRippleColor(ContextCompat.getColorStateList(this,R.color.my_selector));
    

    with something like:

    <selector xmlns:android="http://schemas.android.com/apk/res/android">    
      <item android:alpha="@dimen/mtrl_low_ripple_pressed_alpha" android:color="?attr/colorPrimary" android:state_pressed="true"/>
      <item android:alpha="@dimen/mtrl_low_ripple_focused_alpha" android:color="?attr/colorOnSurface" android:state_focused="true" android:state_hovered="true"/>
      <item android:alpha="@dimen/mtrl_low_ripple_focused_alpha" android:color="?attr/colorOnSurface" android:state_focused="true"/>
      <item android:alpha="@dimen/mtrl_low_ripple_hovered_alpha" android:color="?attr/colorOnSurface" android:state_hovered="true"/>
      <item android:alpha="@dimen/mtrl_low_ripple_default_alpha" android:color="?attr/colorOnSurface"/>
    </selector>
    

    Also you have to check the selector used in the setChipBackgroundColor method, in particular the color used for the selected state:

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <!-- 24% opacity -->
      <item android:alpha="0.24" android:color="@color/custom" android:state_enabled="true" android:state_selected="true"/>
      ....
    </selector>