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!

让进度条消失。

时间: 2024-12-29 06:47:35

WebVeiw 的基本使用的相关文章

webveiw的基本使用?

今天总结下前段时间,所了解的一个控件webview,对于webview相信很多人已经不默认生了,它主要是可以实现android端与javascript的交互,其实很多复杂的页面我们都可以通过webview.loadUrl("xxx.com")去加载一个html的网页,这样可以简化我们android很多的代码逻辑. 目的:  这篇文章主要讲解如果使用webveiw,了解webview中的常用方法和属性. 一般我们有俩种方式来初始化webview控件: 1.通过findviewById()

iOS开发之WKWebView简单使用和常用使用场景

iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版.本着对新事物的好奇,就上网查了一下,但是找了好多个都没说的多了详细,于是就问谷歌,找文档,看看使用方法,试用了一下,果然不错,记录下来,大家分享! WKWebView的特点: 性能高,稳定性好,占用的内存比较小, 支持JS交互 支持HTML5 新特性 可以添加进度条(然并卵,不好用,还是习惯第三方的). 支持内建手势, 据说高达60fps的刷

android之在view中内嵌浏览器的方法

我要做的一个东西是在一个页面的中间嵌入浏览器,一开始不知道从哪里开始,因为以前用的都是Textveiw或者editVeiw之类的控件,而它们并不能用来显示网页的内容,怎么办呢? 首先想到的是:是不是有一个用来显示网页的View呢,于是我就在eclipse里xml编辑器里输入<web,哈哈,果然下面有个提示是webVeiw,那么能不能用它呢?于是到网上搜一下它的资料,果然可以的,下面就开始吧. 先在xml里把webview建好,在代码里用findViewById()将其取出来.我的代码是: Web

我们一起来聊聊中间人攻击

在聊中间人攻击之前,不了解HTTPS握手过程的同学可以查看我的前一篇HTTPS握手介绍. 一.HTTPS握手过程(请点击) 三.中间人攻击 https握手过程的证书校验环节就是为了识别证书的有效性唯一性等等,所以严格意义上来说https下不存在中间人攻击,存在中间人攻击的前提条件是没有严格的对证书进行校验,或者人为的信任伪造证书,下面一起看下几种常见的https"中间人攻击"场景. 1.证书未校验 由于客户端没有做任何的证书校验,所以此时随意一张证书都可以进行中间人攻击,可以使用bur

WKWebView简单使用和常用使用场景

转自http://www.jianshu.com/p/8f6d527f13bc WKWebView的特点: 性能高,稳定性好,占用的内存比较小, 支持JS交互 支持HTML5 新特性 可以添加进度条(然并卵,不好用,还是习惯第三方的). 支持内建手势, 据说高达60fps的刷新频率(不卡) 创建时候很简单 导入Wbkit这个类库(WKWebVeiw包含在里面的) 遵守协议(一般前两个就行啦,第三个主要是与JS相关的东西,这个协议中包含一个必须实现的方法,这个方法是提高App与web端交互的关键,

webview加载网页与全屏播放视频?

上篇我们大致了解了webview的一些属性,以及重要的方法.这篇我们就要一些案列来说明,一般webview最广泛的作用就是,加载一个html的网页(实现与js交互),,webview加载网页网页当中含有视频,webview文件下载等等. 首先我们来了解下webview是如何加载网页的?首先我们看下网页在家的效果? 代码也是比较简单 1 package cn.xiao.webviewplayvideo; 2 import android.app.Activity; 3 import android

url为什么要编码

在做通过关键词查询条目的需求时,发现前端IOS传过来的"中文关键字"是通过url编码的字串,直接使用,我们是是用不了的,拿php为例,我们需要对该值使用urldecode()函数进行解码,解码后就会是对应的中文了.当时觉得很纳闷,为什么前端要对参数编码后传给后台,心里的答案时为了安全起见,防止别人截取url后对其中的参数进行解析.但是,总感觉好模棱两可,既然我后台可以解码出正确值,为什么截取了你url的人不可以呢,如此哪来的安全可言. 于是,我就问了问之前工作的ios的同事,结果,他斩

WKWebView的一些知识

WKWebView的特点: 性能高,稳定性好,占用的内存比较小, 支持JS交互 支持HTML5 新特性 可以添加进度条(然并卵,不好用,还是习惯第三方的). 支持内建手势, 据说高达60fps的刷新频率(不卡) 创建时候很简单 导入Wbkit这个类库(WKWebVeiw包含在里面的) 遵守协议(一般前两个就行啦,第三个主要是与JS相关的东西,这个协议中包含一个必须实现的方法,这个方法是提高App与web端交互的关键,它可以直接将接收到的JS脚本转为OC或Swift对象--网上大神说的,我没用过.

关于html5 -- plus Webview模块管理应用窗口界面

Webview模块管理应用窗口界面,通过plus.webview可获取应用界面管理对象. 方法: all:获取所有的webview窗口 close:关闭webview窗口 create:创建新的webview窗口 currentWebview:获取当前窗口的webviewObject对象 getWebviewById:查找指定标识的webviewObject对象 getLaunchWebview:获取应用首页webviewObject对象 hide:隐藏webveiw窗口 open:创建并打开w