首页 > 代码库 > WebVeiw 的基本使用

WebVeiw 的基本使用

 今天简单那的了解了一下WebView 

大致分为两种情况:  1  在fragment 中     2  在Activity

1 在Fragment中的 WebView Client 点击回退是个难点


解决回退的方法Code:

原理很简单: 就是监听 Fragment 当前的事件, 但按下的时候,看是不是回退键,WebView是否可以回退?

可以的话,直接回退!

//设置 WebView 内部的回退跳转:
		webView.setOnKeyListener(new OnKeyListener() {
			@Override
			public boolean onKey(View v, int keyCode, KeyEvent event) {
				// TODO Auto-generated method stub
				if(event.getAction() == KeyEvent.ACTION_DOWN)
				{
					if(keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack())
					{
						webView.goBack();
						return true;
					}
				}
				return false;
			}
		});



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



package com.cim.pd.ui.fragment;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.ProgressBar;

import com.cim.pd.R;
import com.cim.pd.ui.MainActivity;
import com.cim.pd.view.MyWebViewClient;

/**
 * 菜单栏:
 * 	购买希盟智能设备页面
 * 
 * @author Hades
 * @Time 2014-12-4
 *
 */
public class BuyDeviceFragment extends Fragment {
	
	public static final String ARG = "BuyDeviceFragment";
	
	private MainActivity mainActivity;
	/**
	 * 购买设备的WebView
	 * */
	private WebView webView;

	/**
	 * 进度条
	 * */
	private ProgressBar progressBar;

	@Override
	public void onAttach(Activity activity)
	{
		super.onAttach(activity);
		mainActivity = (MainActivity) activity;
	}
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
	}
	
	@Override
	public View onCreateView(LayoutInflater inflater,
			@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		View view = inflater.inflate(R.layout.fragment_buy_device, container, false);
		
		initTop(view);
		
		initWebView(view);
		
		return view;
	}
	
	/**
	 * 初始化顶部的信息
	 * 
	 * @author Hades
	 * @Time 2014-12-4
	 * @param view
	 */
	private void initTop(View view)
	{
		progressBar = (ProgressBar) view.findViewById(R.id.buy_progressBar);
		progressBar.setVisibility(View.VISIBLE);
		
		ImageView drawerView = (ImageView)view.findViewById(R.id.drawer_menu);
		//设置监听器:
		drawerView.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				mainActivity.toggle();
			}
		});
	}
	
	
	/**
	 * 初始化页面信息:
	 * 
	 * @author Hades
	 * @Time 2014-12-4
	 * @param view
	 */
	private void initWebView(View view)
	{
		webView = (WebView)view.findViewById(R.id.buy_webview);
		webView.getSettings().setJavaScriptEnabled(true);
		String url = "http://m.cim120.com/";
		
		//第一步: 直接加载网址
		webView.loadUrl(url);
		
		//第二步: 设置页面在当前的WebView 中跳转!
		MyWebViewClient client = new MyWebViewClient(mainActivity,progressBar);
		webView.setWebViewClient(client);
		
		//设置 WebView 内部的回退跳转:
		webView.setOnKeyListener(new OnKeyListener() {
			@Override
			public boolean onKey(View v, int keyCode, KeyEvent event) {
				// TODO Auto-generated method stub
				if(event.getAction() == KeyEvent.ACTION_DOWN)
				{
					if(keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack())
					{
						webView.goBack();
						return true;
					}
				}
			}
		});
		
	}
	
	@Override
	public void onDestroyView() {
		// TODO Auto-generated method stub
		super.onDestroyView();
	}
	
	
}


2  Activity 

	
	/**
	 * 初始化组件
	 * 
	 * @Hades
	 * @Dec 3, 2014
	 * @11:35:35 PM
	 */
	private void init() {
		
		webView = (WebView) this.findViewById(R.id.my_buy_webview);
		
		webView.getSettings().setJavaScriptEnabled(true);
		
		String url = "http://m.cim120.com/";
		
		//第一种方式: 直接加载
		webView.loadUrl(url);
		
		//第二种: 创建自己的  浏览器!搜友的数据信息在里面显示!
		MyWebViewClient client = new MyWebViewClient(BuyDeviceActivity.this,progressBar);
		webView.setWebViewClient(client);
		
		
	}

	/**
	 *	设置WebViewClient 内部的回退
	 */
	@Override
	public void onBackPressed() {
		// TODO Auto-generated method stub
		if(webView.canGoBack())
		{
			webView.goBack();
		}else{
			finish();
		}
	}

Activity 内部有一个监听 回退键的  回调方法。

onBAckPressed;


---------------------------------------------------------------------------------------------------------------------------------

    webView 中的 webView.getSettings().setJavaScriptEnabled(true);


    这是添加 Js 的支持, 如果没有这句话的话,就会导致 webView 加载的页面中,
    JS的特效,无法显示!


-------------------------------------------------------------------------------------------------------------------------------

今天有的小大意:

跳转BuyDeviceActivity的时候


    点击的时候, 怎么还保存数据了?
    Error:
    12-04 13:51:19.778: E/CrashHandler(19281): Caused by: libcore.io.ErrnoException: write failed: ENOSPC (No space left on device)


    原因是因为: 自己太大意了! 没有添加  在 Application  中注册 Activity!


------------------------------------------------------------------------------------------------------------------------

WebViewClient是  用来显示WebView  的内容的数据;

如果没有他的话,当你点击啊WebView内部的内容的时候,就会默认的开启一个Intent去调用本地的

浏览器的App。

所以 必须自定义 WebViewClient,  shouldOverrideUrlLoading 是必须重写的。


package com.example.webview;

import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

public class MyWebViewClient extends WebViewClient {

	private ProgressBar progressBar;
	
	public MyWebViewClient() {
		// TODO Auto-generated constructor stub
	}
	
	public MyWebViewClient(Activity context) {
		// TODO Auto-generated constructor stub
		super();
	}
	
	public MyWebViewClient(Activity context,ProgressBar progressBar) {
		// TODO Auto-generated constructor stub
		super();
		this.progressBar = progressBar;
	}
	
	@Override
	public boolean shouldOverrideUrlLoading(WebView view, String url) {
		// TODO Auto-generated method stub
		view.loadUrl(url);
		return true;
	}

	/**
	 * WebView加载完毕数据
	 * */
	@Override
	public void onPageFinished(WebView view, String url) {
		// TODO Auto-generated method stub
//		super.onPageFinished(view, url);
		progressBar.setVisibility(View.GONE);
	}
	
}

onPageFinished()是在  WebView加载成功之后调用的,

这里 可以设置 进度条为 gone!

让进度条消失。


WebVeiw 的基本使用