解决嵌套冲突
父容器嵌套子view,当子view是onTouch默认是返回ture的控件时候,父容器不能监听到点击事件,会被子view消费掉,(比如Edittext)
这里你也可以直接重写 子view onTouchEvent方法 返回false,不过我不太喜欢这样做,为了这个去多写一个类不值得。
跟踪源码
public boolean onTouchEvent(MotionEvent event) { final float x = event.getX(); final float y = event.getY(); final int viewFlags = mViewFlags; final int action = event.getAction(); final boolean clickable = ((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE) || (viewFlags & CONTEXT_CLICKABLE) == CONTEXT_CLICKABLE; if ((viewFlags & ENABLED_MASK) == DISABLED) { if (action == MotionEvent.ACTION_UP && (mPrivateFlags & PFLAG_PRESSED) != 0) { setPressed(false); } mPrivateFlags3 &= ~PFLAG3_FINGER_DOWN; // A disabled view that is clickable still consumes the touch // events, it just doesn't respond to them. return clickable; } ... }
分析源码可以看到final boolean clickable = ((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE) || (viewFlags & CONTEXT_CLICKABLE) == CONTEXT_CLICKABLE;
要让clickable=false,需要设置一下子View(eg:Edittext)几个属性
android:longClickable="false"
android:contextClickable="false"
android:clickable="false"
android:enabled="false"
把上面4个属性都设置为false ,父容器就可以监听到点击事件了
https://blog.csdn.net/cgpllx/article/details/116046938