0

我使用 Android 设计库来滚动工具栏和图像。我有一个带有一些视图和 SwipeRefreshLayout、NestedScrollView 和 WebView 的片段。这是我的布局的层次结构:

<CoordinatorLayout>
 <RelativeLayout
  app:layout_behavior="@string/appbar_scrolling_view_behavior">
   <FrameLayout>
    <RelativeLayout>
     <LinearLayout>
      <SwipeRefreshLayout>
       <NestedScrollView>
        <WebView/>
       </NestedScrollView>
      </SwipeRefreshLayout>
     </LinearLayout>
    </RelativeLayout>
   </FrameLayout
  </RelativeLayout>
</CoordinatorLayout>

有了这个星座,我只有一个问题。WebView 具有内容的完整高度。在开发者控制台中,它看起来像这样:

在此处输入图像描述

有了这种行为,我无法在 webview 中使用 javascript 获得滚动位置。任何建议如何在 javascript 中的 webview 中获得正确的滚动位置?

4

2 回答 2

1

对于所有对 webview 和 nestedscrollview 有相同问题的人。我找到了解决方案。我在 nestedscrollview 上设置了一个 setOnScrollChangeListener 并将当前滚动位置作为 javascript 事件触发。

我的片段布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/swRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.NestedScrollView
    android:id="@+id/nsvScrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
<WebView
    android:id="@+id/wvTest"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</android.support.v4.widget.NestedScrollView>

还有我的片段:

public class TestFragment extends Fragment{

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
   SwipeRefreshLayout view = (SwipeRefreshLayout)inflater.inflate(R.layout.fragment_test, container, false);
    NestedScrollView nsvScrollView = (NestedScrollView)view.findViewById(R.id.nsvScrollView);
    final WebView wvTest = (WebView)view.findViewById(R.id.wvTest);
    nsvScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
        @Override
        public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
            wvTest.loadUrl("javascript:scrollEvent.scrollY = " + scrollY + "; window.dispatchEvent(scrollEvent);");
        }
    });
    wvTest.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            wvTest.loadUrl("javascript:var scrollEvent = document.createEvent(\"Event\"); scrollEvent.initEvent(\"scroll\", true, true);");
        }
    });
    wvTest.getSettings().setJavaScriptEnabled(true);
    WebView.setWebContentsDebuggingEnabled(true);
    wvTest.loadUrl("http://yoursite.com");
    return view;
}
}

在网站上,您可以添加默认滚动侦听器:

<script>
window.addEventListener('scroll', function (e) {
    console.log("Scroll: " + e.scrollY);
}, false);
</script>
于 2016-01-15T15:01:28.480 回答
0

我看到它已经有一段时间了,但我还是会尝试

我有一个类似的问题。

我通过替换: android.support.v4.widget.NestedScrollView 解决了它: android.widget.ScrollView

于 2016-11-12T14:00:56.383 回答