我制作了一个自定义ScrollView
,其中有一个孩子(布局)。在findViewByid
中使用CustomScrollView.java
通过ID查找子项会导致应用崩溃,因此可以通过类似于this
(检测自定义滚动视图)的简单方式来找到该子项,或者getParent()
(它检测滚动视图和子元素都在其中的父布局)?
我正在尝试将requestDisallowInterceptTouchEvent(true);
应用于自定义ScrollView
的子级。
xml:
<?xml version="1.0" encoding="utf-8"?>
<com.example.test4.CustomScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/dynamic_status_scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"
tools:context=".MainActivity">
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/dynamic_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context=".MainActivity">
</android.support.constraint.ConstraintLayout>
</com.example.test4.CustomScrollView>
我要在其中添加CustomScrollView.java
的{{1}}中的代码:
requestDisallowInterceptTouchEvent
问题:
简而言之,我想找到自定义ScrollView的子项,即ID为 @Override
public boolean onTouchEvent(MotionEvent ev) {
// Add here
return super.onTouchEvent(ev);
}
的布局,而无需使用dynamic_status
。
答案 0 :(得分:1)
您应该可以这样做:
@Override
public boolean onTouchEvent(MotionEvent ev) {
((ConstraintLayout)getChildAt(0)).requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(ev);
}
您始终可以使用getChildAt
访问子视图(嵌套的视图比当前视图更深)。由于requestDisallowInterceptTouchEvent
仅适用于ViewGroup,因此您必须将其直接投射到ConstraintLayout上,或者-为了更好的可重用性,将其投射到ViewGroup。
请注意,如果孩子有空,我还没有提供任何检查。
对于Kotlin和Java,此代码也相同。没什么区别(从语法上是可以的,但是概念是相同的。)