Android 中怎么判断WebView已经滑动到底部或顶部还在滑动类似上拉刷新下来加载更多.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 中怎么判断WebView已经滑动到底部或顶部还在滑动类似上拉刷新下来加载更多.相关的知识,希望对你有一定的参考价值。

如题,只需要提供判断思路就好了布局之类的不用考虑. 我就是不知道怎么判断才算已经滑动到顶部或底部了还在滑动.
比如刚刚滚动到底部或底部时不做任何事,当已经在底部或顶部了还在滑动的那种.

参考技术A 我们需要重写webview的滑动方法,自定义一个webview: FoundWebView(可自由命名)代码如下
package com.paoyx.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;
/** * 重新webview
* @author paoyx */
public class FoundWebView extends WebView
ScrollInterface web;
public FoundWebView(Context context)
super(context);
// TODO Auto-generated constructor stub

public FoundWebView(Context context, AttributeSet attrs, int defStyle)
super(context, attrs, defStyle);

public FoundWebView(Context context, AttributeSet attrs)

super(context, attrs);
// TODO Auto-generated constructor stub

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt)
super.onScrollChanged(l, t, oldl, oldt);
//Log.e("hhah",""+l+" "+t+" "+oldl+" "+oldt);
web.onSChanged(l, t, oldl, oldt);

public void setOnCustomScroolChangeListener(ScrollInterface t) this.web=t;

/**
* 定义滑动接口
* @param t
*/
public interface ScrollInterface

public void onSChanged(int l, int t, int oldl, int oldt) ;


在activity的onCreate方法中调用该webview,代码如下:

private FoundWebView mWebView;
mWebView = (FoundWebView)findViewById(R.id.mWebView);
mWebView.setOnCustomScroolChangeListener(new ScrollInterface()
@Override
public void onSChanged(int l, int t, int oldl, int oldt)

// TODO Auto-generated method stub
float webcontent = mWebView.getContentHeight()*mWebView.getScale();//webview的高度

float webnow = mWebView.getHeight()+ mWebView.getScrollY();//当前webview的高度
if( mWebView.getContentHeight()* mWebView.getScale() -( mWebView.getHeight()+ mWebView.getScrollY())==0)

//已经处于底端
lay_bottom_layout.setVisibility(View.VISIBLE);

else

lay_bottom_layout.setVisibility(View.GONE);

//已经处于顶端
if (mWebView.getScaleY() == 0)

);
END

android中Scrollview嵌套WebView问题

scrollView 中嵌套webview 我遇到两个问题:
  1,滑动冲突 scrollview和webview都有滑动功能,可是他们会冲突啊
  2,webview在 不能显示指定url网页数据,实际上是加载了的,其他手机正常显示,华为荣耀8等部分手机中显示空白,究其原因是高的问题,若设置固定高则可以显示数据,但是这是不合理的办法

解决办法:采用重写webView的方法进行解决,代码如下:
public class NoScrollWebView extends WebView {

    @SuppressLint("NewApi")
    public NoScrollWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    public NoScrollWebView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public NoScrollWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NoScrollWebView(Context context) {
        super(context);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int mExpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, mExpandSpec);
    }
}

 

xml中使用方法:

<ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >
                    <com.freedev.tool.view.NoScrollWebView
                        android:id="@+id/webViewNet"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_margin="15dp" />
            </LinearLayout>
        </ScrollView>

 

activity中使用:

if (webView != null) {
        webView.loadUrl(res.getData().getContent());
     }

 

这里需要注意的是webview的初始化,这里贴出代码如下:

    @SuppressLint("SetJavaScriptEnabled")
    private void initWebview() {
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        //启用应用缓存
        webSettings.setAppCacheEnabled(false);
        webSettings.setDatabaseEnabled(false);
        //开启DOM缓存,关闭的话H5自身的一些操作是无效的
        webSettings.setDomStorageEnabled(true);
        //适应屏幕
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                                    //解决android7.0以后版本加载异常问题
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    view.loadUrl(request.getUrl().toString());
                } else {
                    view.loadUrl(request.toString());
                }
                return true;
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                Logger.d("----------onPageFinished ");
            }

            @TargetApi(android.os.Build.VERSION_CODES.M)
            @Override
            public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
                super.onReceivedHttpError(view, request, errorResponse);
                // 这个方法在6.0才出现
                int statusCode = errorResponse.getStatusCode();
                if (ERROR_CODE404 == statusCode || ERROR_CODE500 == statusCode) {
                }
            }

            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                //接受证书
                handler.proceed();
            }
        });
    }

 

 

 



以上是关于Android 中怎么判断WebView已经滑动到底部或顶部还在滑动类似上拉刷新下来加载更多.的主要内容,如果未能解决你的问题,请参考以下文章

Webview&Viewpager滑动冲突解决方案

android webview怎么实现下拉刷新

android的webview下,如果设置了全屏,输入框获得焦点时,软键盘会盖住输入框,怎么破?

Android 解决viewPager中嵌套webView的滑动冲突

求助,android uc浏览器的效果怎么做的,就是webview打开的网页可以手势滑

android中webview 怎么实现网页加载时显示加载进度