不是禁用整个 MainActivity
的触摸,而是只禁用 这个 Activity 里的某个 WebView 控件。
那就不需要用
window.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
因为那个会直接把整个 Activity 的触摸事件都屏蔽掉。
WebView 局部禁用触摸的方式
如果你拿到 WebView 实例,可以这样:
方式 1:直接拦截触摸事件
webView.setOnTouchListener { _, _ ->
true // 返回 true 表示消费掉事件,不再传给 WebView
}
方式 2:继承 WebView 并重写触摸分发
class NonTouchableWebView(context: Context, attrs: AttributeSet?) : WebView(context, attrs) {
override fun onTouchEvent(event: MotionEvent?): Boolean {
return false // 不处理触摸
}
}
然后在布局里用这个自定义 WebView。
方式 3:让 WebView 不可点击 / 不可获得焦点
webView.isClickable = false
webView.isFocusable = false
webView.isFocusableInTouchMode = false
但这种方式对部分内嵌滚动的 WebView 可能仍会响应滑动,要配合
setOnTouchListener
效果最好。
如果你是在 Flutter 项目里用 WebView
插件(比如 webview_flutter
),
想要在 原生端 禁用,可以通过 平台通道 或直接在插件的 Android 源码里对 WebView
加上 setOnTouchListener
拦截。