Fragment叠加点击穿透的解决方案

Fragment叠加出现点击穿透的解决方案

参考文档:
https://blog.csdn.net/dong19870625/article/details/50550147
https://blog.csdn.net/joye123/article/details/77075274

Fragment在开发中很常见,经常会有Fragment叠加的需求,最近在开发中遇到一个现象,在Fragment中add 多个Fragment的时候,当最上方的Fragment点击空白处时,会发生点击穿透,下层在所点击处对应的控件的点击事件就会被触发,怎么解决呢?

出现问题的原因

原因:Fragment的本质就是一个View布局的管理器,当Fragment attach到Activity时,其实就是把Fragment#onCreateView()返回的View,替换掉(如果是用replace)FragmentTransaction#replace中指定的View,或者添加到(如果是add)FragmentTransaction#add()中指定的ViewGroup里面。
当我们以层叠方式显示多个Fragment时,通常的做法就是弄一个FrameLayout,然后每次把Fragment add到此布局。因此,这时Activity的页面布局树实际上就是一个FrameLayout里面包含几个View。
所以,当点击上面Fragment的空白区域时,如果事件没被吃掉,就会向下传递。

解决方案

方式一:在根布局中添加属性android:clickable=”true”

或者在代码中设置:

缺点:需要在每一个Fragment的根布局处添加,Fragment较多的时候,工作量大。

方式二:创建Fragment的基类,在基类中为View添加触摸监听,并返回true

这种方式避免了多处添加clickable的麻烦,但是同时带来一个问题,如果Fragment的根布局使用的是ScrollView,那么就无法滚动了,因为触摸事件已经消费掉了,但如果根布局不是ScrollView的话,就可以用此方式。

方式三:在基类中为 View设置点击监听,而不是触摸监听

此方式可以解决事件穿透,同时不影响根布局是ScrollView的情况。

简单验证Demo:https://github.com/gqq519/FragmentClickIssue

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值