ListView 内的 Android WebView

标签 android android-listview android-webview

我在 ListView 中有一个 WebView。一切正常,除了我无法阻止 ListView 向上/向下滚动,如果 WebView 处理滚动手势。

我知道,我可以使用 OnTouchListener 中的以下代码完全阻止 ListView 的滚动

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_UP) {
        webView.getParent().requestDisallowInterceptTouchEvent(false);
    } else {
        webView.getParent().requestDisallowInterceptTouchEvent(true);
    }
}

但我只想阻止它,而 WebView 没有处理滚动/触摸手势。

例如。我有两个 HTML 页面。一个显示位置的 360 度 View 。这个 WebView 应该完全阻止父级的滚动,而第二个 WebView 只是文本。该页面不会处理触摸事件,因此父 ListView 可以滚动。

PS:HTML不是我自己写的,不能修改。

最佳答案

紧随其后的是@mars3142,下面的代码显示并允许滚动得更像浏览器中显示的网页。

public class InnerScrollWebView extends WebView {

    private Boolean enableScroll = true;

    public InnerScrollWebView(Context context, AttributeSet attrs){
        super(context, attrs);
        getSettings().setDomStorageEnabled(true);
        getSettings().setJavaScriptEnabled(true);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) {
            enableScroll = true;
        }
        if (getParent() != null) {
            getParent().requestDisallowInterceptTouchEvent(enableScroll);
        }
        return super.onTouchEvent(event);
    }

    @Override
    protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
        if (getParent() != null) {
            enableScroll = false;
        }
        super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
    }
}

关于ListView 内的 Android WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25308184/

相关文章:

android - 如何在使用 API 时处理 Flow Coroutines 异步行为

java - 如何也按小写搜索 Firebase 文本?

android - ListView 在与交互之前不会呈现所有项目

android - 当我在 android webview 上加载时 html 文件中的图像路径

android - 处理让我们在 Android M 及更早版本的 WebView 中加密新证书

android - 可绘制资源引用属性

Android SeekBar拇指定制

android - 如何将页脚 View (TextView)添加到 ListView 的末尾?

java - Android 返回旧的 Activity

android - 当通过 WebView.loadURL() 指定不存在的 URL 时,WebViewClient.onPageStarted() 被调用两次