スクロールビュー内に埋め込まれた Webview があります。Webview 自体には、垂直スクロール可能な領域があります。
webview 内をスクロールしようとすると、scrollview は touchevent をインターセプトし、小さなスクロール可能な div のみが移動するのではなく、webview 全体をスクロールします。
webviewがスクロールしたくない場合にのみスクロールビューを機能させるにはどうすればよいですか?
スクロールビュー内に埋め込まれた Webview があります。Webview 自体には、垂直スクロール可能な領域があります。
webview 内をスクロールしようとすると、scrollview は touchevent をインターセプトし、小さなスクロール可能な div のみが移動するのではなく、webview 全体をスクロールします。
webviewがスクロールしたくない場合にのみスクロールビューを機能させるにはどうすればよいですか?
私の場合、scrollview コンテナ内に webview があり、scrollview と webview はフルスクリーンです。webView touchListener で onTouch イベントをオーバーライドすることで、これを修正できました。
scrollView = (ScrollView)findViewById(R.id.scrollview);
webView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
scrollView.requestDisallowInterceptTouchEvent(true);
return false;
}
}
TouchyWebView.java を使用する
public class TouchyWebView extends WebView {
public TouchyWebView(Context context) {
super(context);
}
public TouchyWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TouchyWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onTouchEvent(MotionEvent event){
requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(event);
}
}
レイアウト ファイル内:
<yourclasapath.TouchyWebView
android:id="@+id/description_web"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
@ Janusz、私は同じ問題を抱えていました。私の解決策は、正しいレイアウトと組み合わせた拡張スクロール ビュー動作に基づいています。同じ質問への回答をここに書きました。実装の問題や質問がある場合はお知らせください。それが役立つかどうかをお知らせください:)
私たちのソリューションは、Javascript Interfaceを介して Javascript コールバックを使用します。WebView 内でスクロール可能な UI の一部がタッチされるたびに、Java スクリプトを介してリスナーが呼び出され、このリスナーはWebViews 親でrequestDisallowInterceptTouchEventを呼び出します。
これは最適ではありませんが、現時点で見つかった最も優れたソリューションです。ユーザーが非常に速くスクロールすると、WebView のレイヤーはスクロールしませんが、通常のスクロール レートでは問題なく動作します。