安卓设置监听事件后波纹效果不起作用

Android ripple effect not working after catch the click event

 

事件起因:

布局:LinearLayout上放置TextView和Switch,统一作为RecycleView的一个item,还有一个最底层的布局也是LinearLayout,如下

 

在第二层LinearLayout上加入如下属性设置

想让RecycleView中textView和Switch点击时产生波纹效果,但是不起作用,通过一步步测试发现LinearLayout设置监听事件后才会不产生波纹效果,但是如果不在LinearLayout上设置Click监听事件,就不能让整个item产生波纹效果,比如如果监听的点击事件在TextView上,那么波纹效果只会在TextView上。

 

解决办法:

在最底层放置另一种布局 — constraintlayout,再上层之后不变化,还是LinearLayout -> TextView + Switch ,  TextView和Switch全部设置一个 android:clickable=”false” 属性,在适配器Adapter中统一捕获LinearLayout布局的点击事件,然后再手动书写代码完成按钮等的状态更改,如果按钮忘了设置不可点击属性,那么点击按钮时是不会有波纹效果的。

 

xml如下:

 

 

适配器中的相关代码:

 

注:

作者不是专业的,纯粹一个业余爱好者,可能错误之一不是最底层使用了LinearLayout造成,而是相关配置有问题导致,在此不予求证。

另代码只做参考,包含相关变量在其他文件或其他代码中没有贴上来,所以这些无法直接使用,望周知。