АЛЬТЕРНАТИВА 1
Обновленный ответ! Я проверил настройку всех прослушивателей кликов для всей иерархии представления следующим образом, используя kotlin функцию расширения для класса представления
private fun View.dissableClick() {
setOnClickListener(null)
if (this is ViewGroup) {
for (v in children) {
v.setOnClickListener(null)
}
}
}
Так что вы можете вызвать root.dissableClick()
Вы также можете попробовать использовать isEnabled = false
и v.isEnabled = false
вместо setOnClickListener(null)
ALTERNATIVE 2 (Кредит @Amin Mousavi Answer)
Также из этой документации Управление событиями касания в ViewGroup, Вам необходимо создать пользовательскую группу представлений в вашем случае - пользовательскую LinearLayout
class InterceptLinearLayout @JvmOverloads constructor(
context: Context, attr: AttributeSet? = null, defStyleAttr: Int = 0
) : LinearLayout(context, attr, defStyleAttr) {
var intercept = false
override fun onInterceptTouchEvent(ev: MotionEvent?) = when (intercept) {
true -> true
else -> super.onInterceptTouchEvent(ev)
}
}
Примечание. Если вы не предоставляете перегрузки для всех суперконструкторов, ваше приложение собирается создать sh
Измените xml с <LinearLayout ...
на <package.InterceptLinearLayout ...
На вашей ссылке на Activity на InterceptLinearLayout
root.intercept = true
Оба решения работали для меня