父控件对子控件事件拦截处理

本文探讨了在Android开发中,如何通过父控件对子控件的触摸事件进行拦截,以实现特定功能,如在搜索过程中阻止清除按钮对EditText文本的清除。介绍了两种解决方案,并详细展示了通过重写父控件的onInterceptTouchEvent方法来控制事件分发的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       由于前段时间工作有一个项目太棘手太忙了 一直没有时间好好的去总结.好久也没更新自己的博客了.这次我就简单的讲解下简单的父控件对子控件的拦截事件的处理.

      在工作中可能会遇到当这种情况 ,一个组合的搜索框,父控件中包含一个EditText 和一个清除的Button 当在搜索时候不容许点击清除按钮清除EditText的文本内容.这种情况有两种解决方案:

  1. 可以判断是否在搜索 从而对Button设置是否可以点击

  2.使用我将介绍的方法解决.通过父控件拦截子控件的事件,通过事件分发机制来处理.

分析了一波,那就直接上代码了:

1.我们自定义一个父控件并重写它的 onInterceptTouchEvent(MotionEvent ev)方法.

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
  if (isIntercept){
    return  true;
  }
  return super.onInterceptTouchEvent(ev);
}


/**
 * 通过外界来控制是否拦截子控件的事件
 * @param intercept
 */
public void setIntercept(boolean intercept) {
  this.isIntercept = intercept;
}

      我在这里通过在父控件中定义一个方法,通过改变变量的方法来控制父控件是否拦截子控件的事件.这样就完美的解决了我上述所说的问题.希望这篇文章对你的工作和学习有所帮助!!!!!

 

 

 

 

 

 

  

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值