스크롤뷰 안에 스크롤이 필요한 경우
NestedScrollView를 이용하여, 스크롤이 되게 할 수 있는데,
웹뷰의 경우는 웹페이지가 스크롤이 필요한 경우라 NestedScrollView로 해결 할 수 없다.
해당 문제를 해결하기 위해선, 웹뷰에서 발생하는 터치 이벤트를
다른 뷰에 뺏기지 않아야 원하는 결과를 얻을 수 있다.
먼저 웹뷰를 상속 받는 클래스를 하나 만든다.
상속 받은 웹뷰 클래스에 onTouchEvent 메소드를 Overriding 한다.
public class RoadView extends WebView {
@Override
public boolean onTouchEvent(MotionEvent event) {
requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(event);
}
}
requestDisallowInterceptTouchEvent(true)를 추가 하면 웹뷰 단에서 처리할 코드는 완료된다.
이 메소드는 웹뷰에서 발생하는 이벤트를 다른 뷰에서 가로채는 것을 막는 역할을 한다.
따라서 부모뷰인 스크롤뷰가 웹뷰에서 발생하는 이벤트를 가로채지 못하게 된다.
마지막으로 아래와 같이 xml에 적용 하면 스크롤이 가능한 웹뷰가 만들어진다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.fimtrus.test.view.RoadView
android:id="@+id/roadview"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_marginBottom="16dp" />
</LinearLayout>
</ScrollView>
</LinearLayout>