Art*_*tem 4 javascript android webview swiperefreshlayout
我有一个SwipeRefreshLayout视图作为父视图。在它里面,我正在使用加载网页的webview。我想通过下拉SwipeRefreshLayout重新加载Webview。这是我的xml:
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>
Run Code Online (Sandbox Code Playgroud)
和Java代码:
mWebView = (WebView) view.findViewById(R.id.webView);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("http://kashirskoe.vegas-city.ru/renter/");
mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.refresh_layout);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mSwipeRefreshLayout.setRefreshing(true);
mSwipeRefreshLayout.postDelayed(new Runnable() {
@Override
public void run() {
mWebView.reload();
mSwipeRefreshLayout.setRefreshing(false);
}
}, 1000);
}
});
Run Code Online (Sandbox Code Playgroud)
第一次脸红时效果很好。但是,当用户向下滚动时(例如,网页上的地图控件),它不会滚动。代替此SwipeRefreshLayout截取滚动并刷新网页(示例页面URL在代码上)。
当页面上的任何Web控件滚动时,我想禁用SwipeRefreshLayout滚动。就像它在浏览器Google Chrome中一样。
我想我需要在webview中注入并执行JavaScript,以便检测页面上任何滚动控件上的滚动事件。并将其传递给android本机代码。我知道如何将其传递给本机代码。
但是,如何在JavaScript中检测到此滚动事件?
您可以通过定义扩展WebView的自定义WebView类并在onOverScrolled此处覆盖doc方法来检测WebView的内容是否正在滚动。
从禁用SwipeRefreshLayout开始,并在WebView中的内容不滚动时启用它。然后,您可以通过捕获WebView上发生的touch DOWN事件来检测滚动手势的开始。
public class MyWebView extends WebView{
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
if( clampedX || clampedY ){
//Content is not scrolling
//Enable SwipeRefreshLayout
ViewParent parent = this.getParent();
if ( parent instanceof SwipeRefreshLayout) {
((SwipeRefreshLayout)parent).setEnabled(true);
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
if(event.getActionMasked()==MotionEvent.ACTION_DOWN){
//Disable SwipeRefreshLayout
ViewParent parent = this.getParent();
if ( parent instanceof SwipeRefreshLayout) {
((SwipeRefreshLayout)parent).setEnabled(false);
}
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2010 次 |
| 最近记录: |