Android 中怎么判断WebView已经滑动到底部或顶部还在滑动类似上拉刷新下来加载更多.
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 中怎么判断WebView已经滑动到底部或顶部还在滑动类似上拉刷新下来加载更多.相关的知识,希望对你有一定的参考价值。
如题,只需要提供判断思路就好了布局之类的不用考虑. 我就是不知道怎么判断才算已经滑动到顶部或底部了还在滑动.
比如刚刚滚动到底部或底部时不做任何事,当已经在底部或顶部了还在滑动的那种.
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已经滑动到底部或顶部还在滑动类似上拉刷新下来加载更多.的主要内容,如果未能解决你的问题,请参考以下文章
android的webview下,如果设置了全屏,输入框获得焦点时,软键盘会盖住输入框,怎么破?
Android 解决viewPager中嵌套webView的滑动冲突