概要
リストアイテム内にChipを表示している画面で、リストアイテムをタップするとChipにもRippleEffectが発生していました。
動作上は問題ありませんが、見た目に少し違和感を感じました。
リストアイテムをタップしてもChipにはRippleEffectが発生しないように修正しました。
- rippleColorを透明にする
- clickListenerをnullにするとRippleEffectは発生しないがElevationが効かなくなる
詳細
rippleColorを透明にする
app:rippleColor="@android:color/transparent"
を指定するとRippleEffectの色を透明にできます。
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.chip.Chip
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checkable="false"
android:clickable="false"
app:chipIconEnabled="false"
app:closeIconEnabled="false"
app:rippleColor="@android:color/transparent" />
clickListenerをnullにするとRippleEffectは発生しないがElevationが効かなくなる
挙動を見たところ親のリストアイテムで発生したクリックイベントが子のChipに伝搬しているように思えました。
そのため、試しにChipのクリックリスナーにnullを設定してクリックイベントが伝搬しないようになるか試してみました。
結果的にRippleEffectは発生しなくなりましたが、タップ時のElevationがなくなってしまいました。
また、これまではandroid:clickable="false"
でクリック不可にしていたChipがクリックできるようになってしまいました。
(LayoutInflater.from(context).inflate(R.layout.chip, this, false) as Chip).setOnClickListener(null)