浅谈Android之webView及交互

记得有一段时间安卓的webview挺火的,很多都喜欢用h5来开发页面。不过相对于原声安卓,webview的缺点显而易见,慢,耗电,用户体验不好。或许对开发人员还好,因为可以跨平台(ios,安卓都能用),而且开发难度也不是很大。安卓本身的webview是基于webkit浏览器的,而如果用过支付宝或者微信其实就能发现,他们肯定是进行了很多改进,把网页一下拉就能看到xxx提供技术支持。

下面这段代码介绍了webview的简单用法,以及如何通过安卓通过post方法去访问一个webview。

import org.apache.http.util.EncodingUtils;

import android.support.v7.app.ActionBarActivity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends ActionBarActivity {

	private WebView wb;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		wb = (WebView) findViewById(R.id.webview);
		//因为webview是用来加载网页的,所以android为他提供了一些浏览器操作
		//goBack()后退
		//goForward()前进
		//zoomIn()放大网页
		//zoomOut()缩小网页
		//wb.loadUrl("");这个方法还算常用,可以用来加载网上的url,也可以加载本地的html页面
		//wb.loadDataWithBaseUrl(baseurl,data,mimeType,encoding)使用webview来加载html代码,第一个参数是指定要加载的html代码,其余的猜都能猜到
		wb.setVerticalScrollbarOverlay(true); //指定的垂直滚动条有叠加样式
        WebSettings settings = wb.getSettings();
        settings.setJavaScriptEnabled(true);//让其支持javascript
        settings.setUseWideViewPort(true);//设定支持viewport

        settings.setLoadWithOverviewMode(true);

        settings.setBuiltInZoomControls(true);

        settings.setSupportZoom(true);//设定支持缩放

        String postData = "key1=value1&key2=value2";

        wb.postUrl("http://116.228.21.162:9127/umsFrontWebQmjf/umspay", EncodingUtils.getBytes(postData, "utf-8"));//通过post方法访问URL,EncodingUtils为org.apache.http.util包下的类
        wb.setWebViewClient(new WebViewClient() {//对url状态进行监听
            @Override
            public void onPageFinished(WebView view, String url) {
                if (url.equals("http://116.228.21.162:9127/umsFrontWebQmjf/payInfo!backSuccessPage.ac")) {
                   // getEvenice();
                }
                super.onPageFinished(view, url);
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                Log.i("info", "start......" + url);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.i("info", "should over" + url);
                return super.shouldOverrideUrlLoading(view, url);
            }
        });

	}

}

这里我简单介绍一下js对安卓和webview进行交互。

html代码

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页</title>
<script type="text/javascript">

function appendText(a){
	var div = document.getElementById('content');
	div.innerHTML = div.innerHTML + a + '<br/>';
}

</script>
</head>
<body>
	这是一个本地的HTML页面<br/>
	<a href="tel:9527">
		<img src="images/getready.png">
	</a>
	<br/>
	<a href="javascript:plugin.call('9527');">直接调用java方法</a>

	<br/>
<div id="content">
</div>	

</body>
</html>

Java代码

public class MainActivity extends Activity {

	private WebView webView;

	@SuppressLint("JavascriptInterface")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		webView = (WebView) findViewById(R.id.webview);
		//webView.loadUrl("http://www.baidu.com");
		webView.loadUrl("file:///android_asset/index.html");

		//开启使用Javascript函数
		webView.getSettings().setJavaScriptEnabled(true);
		//将一个java对象传递到HTML页面中
		//plugin就是页面中js对象的名称
		webView.addJavascriptInterface(new MyPlugin(), "plugin");
	}

	class MyPlugin{
		public void call(String number){
			Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));
			startActivity(intent);
		}
	}

	public void append(View btn){
		//调用js函数
		webView.loadUrl("javascript:appendText('找不到工作了怎么办?');");
	}

}

Xml代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <WebView
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"/>

    <Button
        android:layout_width="fill_parent"
        android:layout_weight="0"
		android:layout_height="wrap_content"
        android:text="调用Js函数"
        android:onClick="append"/>

</LinearLayout>
时间: 2024-10-25 17:42:41

浅谈Android之webView及交互的相关文章

浅谈Android多屏幕的事

浅谈Android多屏幕的事 一部手机可以同时看片.聊天,还可以腾出一支手来撸!这么吊的功能(非N版本,非第三方也能实现,你不知道吧)摆在你面前,你不享用?不关注它是怎样实现的?你来,我就满足你的欲望! 一部手机可以同时看片.聊天,还可以腾出一支手来撸==!就像这样: 是时候告别来回切换应用屏幕的酸爽了,还可以在分屏模式下两Activity间直接拖放数据! 好高大上的样子!这是怎么实现的?别急,我们一一道来: kitkat(4.4)版本对多任务分屏的实现 由于相关的代码和功能被封装及隐藏起来,所

浅谈Android保护技术__代码混淆

浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为.将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字.比如改写成单个字母,或是简短的无意义字母组合,甚至改写成"__"这样的符号,使得阅读的人无法根据名字猜测其用途.对于支持反射的语言,代码混淆有可能与反射发生冲突.代码混淆并不能真正阻止反向工程,只能增大其难度.因此,对于对安全性要求很高的场合,仅仅

JavaScript:浅谈iOS与H5的交互-JavaScriptCore框架

JavaScript:浅谈iOS与H5的交互-JavaScriptCore框架 前言 小的作为一个iOS程序猿,可能研究JavaScript以及H5相关的知识并不是为了真正的要去转行做这一方面,其实更多的为了要研究OC中的JavaScriptCore框架,JavaScriptCore框架主要是用来实现iOS与H5的交互.当然了,最早我曾经写过iOS浅谈webView的JS一种用法.(去掉web显示页的广告),这种算得上最简单的iOS与H5的交互了.现在混合编程越来越多,H5的相对讲多,所以研究J

浅谈Android 事件分发机制(一)

在上一篇文章中,浅谈Android 事件分发机制(一),简要分析了一下事件分发机制的原理,总结一下就是事件层层传递,直到被消费,原理看似简单,但是在实际使用过程中,场景各不相同,复杂程度也就因产品而异,这篇文章就通过给view加移动来模拟事件分发. 触摸事件 这里涉及到几个与手指触摸相关的常见事件: 坐标系对于单指触控移动来说,一次简单的交互流程是这样的:手指落下(ACTION_DOWN) -> 移动(ACTION_MOVE) -> 离开(ACTION_UP) 坐标系 Android坐标系以手

浅谈 Android Service

 浅谈Android Service的基本用法: 关于Service最基本的用法自然是启动和停止操作. 启动Service有两种方式: 1.通过startService(Intent intent)方式启动,启动时会自动执行onCreate(),onStartCommand()方法. 2.通过bindService(Intent intent,ServiceConnection connection,int flag) 第一个参数是一个Intent对象,第二个参数是连接Service的实例,

浅谈Android五大布局

Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLayout(线性布局).FrameLayout(单帧布局).RelativeLayout(相对布局).AbsoluteLayout(绝对布局)和TableLayout(表格布局). LinearLayout: LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后

浅谈Android五大布局(二)——RelativeLayout和TableLayout

在浅谈Android五大布局(一)中已经描述了LinearLayout(线性布局).FrameLayout(单帧布局)和AbsoulteLayout(绝对布局)三种布局结构,剩下的两种布局RelativeLayout(相对布局)和TableLayout(表格布局)相对之前布局结构稍显复杂一点,所以这里另起篇幅进行介绍. RelativeLayout: RelativeLayout按照各子元素之间的位置关系完成布局.在此布局中的子元素里与位置相关的属性将生效.例如android:layout_be

浅谈Android onClick与onLongClick事件触发的问题

之前做按钮的点击事件一直没有注意一些细节,今天做了一个按钮需要有点击和长点击触发不同效果,直接让Activity implements OnClickListener, OnLongClickListener然后添加了相应的处理函数. @Override public void onClick(View v) { // TODO Auto-generated method stub } @Override public boolean onLongClick(View v) { // TODO

安卓开发_浅谈Android动画(四)

Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属性动画类 方法 描述 setDuration(long duration) 设置动画持续时间的方法 setEvaluator(TypeEvaluator value) 设置插值计算的类型 setInterpolator(TimeInterpolator value) 设置时间插值器的类型 addUp