您的位置:首页 > 移动开发

Android SwipeRefreshLayout谷歌官方下拉刷新加载WebView网页介绍

2014-08-22 13:59 645 查看
Android SwipeRefreshLayout谷歌官方下拉刷新加载WebView网页

这个下拉刷新很简单,但是效果还是很炫酷的,使用的话需要android -support-v4的支持,但是一定要带入这个jar是正确的,要是报错就导入外加的jar包,android -support-v4包出错的解决方案,网上有很多帖子,可以自己去看看。

这个是我从我的项目里面提取的,可运行,欢迎下载测试

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@drawable/actionbar_bg" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="资讯"
            android:textColor="#FFFFFF"
            android:textSize="26sp" />

        <ImageView
            android:id="@+id/goBackRF"
            android:layout_width="45dp"
            android:layout_height="45dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_margin="5dp"
            android:background="@drawable/return_left" />

    </RelativeLayout>
    
    <android.support.v4.widget.SwipeRefreshLayout 
    android:id="@+id/swipe_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

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

        <WebView 
         android:id="@+id/mWebViewRF"
         android:layout_margin="3dp"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         />
        
    </ScrollView>

</android.support.v4.widget.SwipeRefreshLayout>
    
    
</LinearLayout>

下面是java代码
package com.example.refreshtest;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.graphics.Bitmap;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity implements SwipeRefreshLayout.OnRefreshListener{

	private SwipeRefreshLayout swipeLayout;
	private ImageView ib_goBack;
	private WebView webView;
	private ImageView iv_goBackRF;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_refresh_test);

		swipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
		swipeLayout.setOnRefreshListener(this);
		swipeLayout.setColorScheme(android.R.color.holo_blue_bright,
				android.R.color.holo_green_light, android.R.color.holo_orange_light,
				android.R.color.holo_red_light);
		
		iv_goBackRF = (ImageView) findViewById(R.id.goBackRF);
		webView = (WebView) findViewById(R.id.mWebViewRF);
		
		/**
		 * 如果页面中链接,如果希望点击链接继续在当前的browser中响应,而不是打开android系统中的browser来接在
		 * 那么就必须覆盖webview中的WebViewClient对象
		 */
		
		webView.setWebViewClient(new WebViewClient(){

			//让新打开的网页在当前的webview中显示
			@Override
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				
				view.loadUrl(url);
				return true;
				
			}
			//网页开始加载
			@Override
			public void onPageStarted(WebView view, String url, Bitmap favicon) {
				// TODO Auto-generated method stub
				super.onPageStarted(view, url, favicon);
				swipeLayout.setRefreshing(true);
			}
			
			//网页加载完毕
			@Override
			public void onPageFinished(WebView view, String url) {
				// TODO Auto-generated method stub
				super.onPageFinished(view, url);
				swipeLayout.setRefreshing(false);
			}
			
			//重新请求网页数据
			@Override
			public void onFormResubmission(WebView view, Message dontResend,
					Message resend) {
				// TODO Auto-generated method stub
				super.onFormResubmission(view, dontResend, resend);
			}
			
			
		});
		
		
		webView.setWebChromeClient(new WebChromeClient()
		{

			@Override
			public void onProgressChanged(WebView view, int newProgress) {
				super.onProgressChanged(view, newProgress);
				MainActivity.this.setProgress(newProgress*100);
			}
			
			
			
		});
		
		webView.loadUrl("http://www.51ltx.com/service/GetHtml.aspx?Type=IndexInfo");
		
		iv_goBackRF.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {

				if(webView.canGoBack())
				{
					webView.goBack();
				}
				else 
				{
				
					Toast.makeText(MainActivity.this, "已到最后了!", Toast.LENGTH_SHORT).show();
					
				}
				
				
			}
		});
		
	}
	
	
	/**
	 * 如果不做任何处理,浏览网页,点击系统“Back”键,整个browser会调用finish()而结束本身,如果希望浏览的网页是回退
	 * 而不是退出浏览器,那么就需要在在当前的Activity中处理并消费掉Back事件
	 */

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		
		if(webView.canGoBack())
		{
			webView.goBack();
		}
		
		return true;
	}

	public void onRefresh() {
		new Handler().postDelayed(new Runnable() {
			@Override
			public void run() {
				
				webView.loadUrl(webView.getUrl());
				swipeLayout.setRefreshing(false);
			}
		}, 3000);
	}
}


对了,这是要联网的,哥们儿还得加上权限才可以访问网络:<uses-permission android:name="android.permission.INTERNET"/>

上传的Demo上从我项目里面提取的,测试可用,觉得还可以的哥们儿给个好评吧








Demo下载地址:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: