WebView 的使用----android和html的交互
一、主布局文件
<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:gravity="center_horizontal"
android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal" >
<Button
android:id="@+id/goback_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="goback_btn"
android:text="向上" />
<Button
android:id="@+id/forward_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="forward_btn"
android:text="向下" />
<Button
android:id="@+id/in_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="in_btn"
android:text="放大" />
<Button
android:id="@+id/out_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="out_btn"
android:text="缩小" />
</LinearLayout>
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/tj_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:text="提交" />
</LinearLayout>
二、Activity 主类
package com.bright.webhtml;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;
@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {
private WebView webview;
private WebSettings set;
private Button tj_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview_main);
tj_btn = (Button) this.findViewById(R.id.tj_btn);
// 实例化WebView对象
webview = (WebView) this.findViewById(R.id.webview);
set = webview.getSettings();
// 设置WebView属性,页面文本编码
set.setDefaultTextEncodingName("utf-8");
// 设置WebView属性,能够执行Javascript脚本
set.setJavaScriptEnabled(true);
// 页面表示的 url 的处理(action)
webview.setWebViewClient(new MyClient());
// 页面 alert 警告框和 Confirm 确认框的处理
webview.setWebChromeClient(new MyChrome());
// 加载需要显示的网页 http://www.51cto.com/
webview.loadUrl("file:///android_asset/dadianhua.html");
// webview.loadUrl("file:///android_asset/day15_webview_js.html");
tj_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
webview.loadUrl("javascript:checkform()");
}
});
webview.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
}
class DemoJavaScriptInterface {
@JavascriptInterface
public void clickOnAndroid(String result) {
Log.i("Bright", "返回的结果是:" + result);
}
}
// 处理加载过来的页面里面的请求动作
class MyClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Toast.makeText(MainActivity.this, url, 0).show();
String success = "file:///android_asset/success.html?";
String baidu = "https://www.baidu.com/";
if ("file:///android_asset/success.html?".equals(url)) {
tj_btn.setVisibility(View.GONE);
view.loadUrl(success);
} else if ("https://www.baidu.com/".equals(url)) {
view.loadUrl(success);
}
return true;// true 动作处理过了,后续操作不执行、false 动作没有处理,执行后续操作
}
}
// 处理加载的页面的 alert\Confirm
class MyChrome extends WebChromeClient {
// 错误信息警告提示框的处理
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
// 关闭页面里面的 alert 警示框
result.cancel();
// 自定义信息警示框
AlertDialog.Builder ad = new AlertDialog.Builder(MainActivity.this);
ad.setIcon(R.drawable.ic_launcher).setTitle("错误信息提示");
ad.setMessage(message).setPositiveButton("确认", null);
ad.create().show();
return true;
}
// 确认信息提示框的处理
@Override
public boolean onJsConfirm(WebView view, String url, String message,
final JsResult result) {
AlertDialog.Builder ad = new AlertDialog.Builder(MainActivity.this);
ad.setIcon(R.drawable.ic_launcher).setTitle("错误信息提示");
ad.setMessage(message);
ad.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 用户界面选择确认时,加载的页面里面的 使用 result confirm 进行设置确认
result.confirm();
}
});
ad.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 用户界面选择取消时,加载的页面里面的 使用 result cancel 进行设置取消
result.cancel();
}
});
ad.create().show();
return true;
}
}
// 向上回退
public void goback_btn(View v) {
webview.goBack();
}
// 向下加载
public void forward_btn(View v) {
webview.goForward();
}
// 页面放大
public void in_btn(View v) {
webview.zoomIn();
}
// 页面缩小
public void out_btn(View v) {
webview.zoomOut();
}
// 设置回退
// 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack(); // goBack()表示返回WebView的上一页面
return true;
} else {
super.onKeyDown(keyCode, event);// 退出应用程序
}
return true;
}
}
三、资源布局文件
操作的页面:::file:///android_asset/dadianhua.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>注册</title>
<script language="JavaScript">
// 定义一个 JavaScript 函数 供页面的事件来调用
function checkform() {
// alert 弹出一个警告框
// alert("你的操作是" + params);
// 得到输入的用户名
var myname = document.getElementById("id1");// 用户名输入框对象
var namevalue = myname.value;
// 验证用户名
if(namevalue.length <= 0){
alert("用户名不能为空");
// var div1 = document.getElementById("div1");
// div1.innerHTML = "<font color='red'>用户名不能为空</font>";
return;
}
// 得到输入的密码
var mypass = document.getElementById("id2");
var passvalue = mypass.value;
// 验证密码
if(passvalue.length < 6){
alert("密码不能小于 6 为数字");
// var div2 = document.getElementById("div2");
// div2.innerHTML = "<font color = 'red'>密码为的长度不能小于 6</font>";
return;
}
// 用户名和密码验证都通过之后、得到form 表单对象、执行提交 表单信息
if(confirm("确认注册吗?")){
// alert("true");
var myform = document.getElementById("form1");
myform.submit();
// window.demo.clickOnAndroid("result");
}else{
// alert("false\n放弃注册");
}
}
</script>
</head>
<body>
<!-- form 表单 -->
<form action="success.html" id="form1">
用户名:<input type="text" id="id1" /><div style="display: inline;" id="div1" ></div><br />
密 码:<input type="password" id="id2" /><div style="display: inline;" id="div2" ></div><br />
<!-- <input type="button" onclick="checkform();" value="注册" /><a href="https://www.baidu.com/">百度</a> -->
</form>
</body>
</html>
跳转后的页面:::file:///android_asset/success.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册成功!</title>
</head>
<body>
恭喜您注册成功!!
</body>
</html>
WebView 的使用----android和html的交互的更多相关文章
- 客户端相关知识学习(三)之Android原生与H5交互的实现
Android原生与H5交互的实现 H5调用原生的方式 方式可能有多种,根据开发经验,接触过两种方式. 方法一:Android向H5注入全局js对象,也就是H5调Android 1.首先对WebVie ...
- Android - 和其他APP交互 - 获得activity的返回值
启用另一个activity不一定是单向的.也可以启用另一个activity并且获得返回值.要获得返回值的话,调用startActivityForResult()(而不是startActivity()) ...
- Android - 和其他APP交互 - 把用户带到其他app
Android的重要功能之一就是app可以根据要执行的操作让用户启动另外一个app.例如,app有一个商业地址然后想要在地图上显示,并不需要在app中加一个显示地图的activity,可以直接用Int ...
- [Unity][安卓]Unity和Android Studio 3.0 交互通讯(1)Android Studio 3.0 设置
[安卓]Android Studio 3.0 JDK安卓环境配置(2017.10) http://blog.csdn.net/bulademian/article/details/78387052 [ ...
- android json解析及简单例子+Android与服务器端数据交互+Android精彩案例【申明:来源于网络】
android json解析及简单例子+Android与服务器端数据交互+Android精彩案例[申明:来源于网络] android json解析及简单例子:http://www.open-open. ...
- Appium - WebView測试(Android)
Appium - WebView測试 作者: Max.Bai 时间: 2015/07 Appium - WebView測试(Android) 如今App都是混合型的.有原生的也包括WebView的,a ...
- Android原生和H5交互;Android和H5混合开发;WebView点击H5界面跳转到Android原生界面。
当时业务的需求是这样的,H5有一个活动商品列表的界面,IOS和Android共用这一个界面,点击商品可以跳转到Android原生的商品详情界面并传递商品ID: 大概就是点击H5界面跳转到Androi ...
- Android与JavaScrip进行交互(二)
一.思路分析 经过測试发现,JS中的点击事件仅仅能写一个,假设写了多个,也仅仅会响应第一个,假设写的方法是android端的方法,在web端执行时,后台会报没有定义这种方法的错误.前台点击无响应. 所 ...
- android与js的交互之jsbridge使用
众所周知,app的一些功能可能会使用到H5开发,这就难免会遇到java与js 的相互调用,android 利用WebViewJavascriptBridge 实现js和java的交互,这里介绍下JsB ...
随机推荐
- sublime text 配置 builder [build system]
有时候需要用运行一段 PHP 代码,比如测试某个函数返回值等等,如果启动 Http Server,再打开浏览器,那黄花菜都凉了.我们可以在 Sublime Text 3 中创建 PHP 的 build ...
- jquery学习方法
http://www.runoob.com/jquery/jquery-tutorial.html jQuery 语法 通过 jQuery,您可以选取(查询,query) HTML 元素,并对它们执行 ...
- Query Designer:Condition,根据KeyFigure值来过滤数据
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- DAL.SQLHelper 的类型初始值设定项引发异常的处理
这是DAL.SQLHelper的类中定义了sql连接字符串,但是在web.config中没有定义,在类判断获取的字符串是否为空,或是在web.config添加相应的连接字符串.
- jquery总结06-动画事件02-上卷下拉动画
.slideDown() 下拉动画 动画执行之后的操作写在回调函数里 $("ele").slideDown(1000, function() { //等待动画执行1秒后,执行别的动 ...
- idea打包java可执行jar包
1,在项目上鼠标右键 --> Open Module Settings 2, Artifacts --> + --> JAR --> From modules with dep ...
- Scrum Meeting 11-20151217
任务安排 姓名 今日任务 明日任务 困难 董元财 网络连接框架优化 请假(数据库) 无 胡亚坤 优化商品搜索界面 请假(数据库) 无 刘猛 请假(参加编译测试) 无 马汉虎 请假(参加编译测试) 无 ...
- .net连接DB2的异常SQL0666 - SQL query exceeds specified time limit or storage limit.错误处理
SQL0666 - SQL query exceeds specified time limit or storage limit. 原因:查询超时 解决办法: set the DbCommand.C ...
- gulp 插件
原文链接:http://www.mamicode.com/info-detail-517085.html gulp是什么? http://gulpjs.com/ 相信你会明白的! 与著名的构建工具gr ...
- IIS7.0 Appcmd 命令详解和定时重启应用池及站点的设置
IIS7.0 Appcmd 命令详解 废话不说!虽然有配置界面管理器!但是做安装包的时候命令创建是必不可少的!最近使用NSIS制作安装包仔细研究了一下Appcmd的命令,可谓是功能齐全. 上网查了些资 ...