一、主布局文件

<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 />
            密&nbsp;&nbsp;&nbsp;&nbsp;码:<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的交互的更多相关文章

  1. 客户端相关知识学习(三)之Android原生与H5交互的实现

    Android原生与H5交互的实现 H5调用原生的方式 方式可能有多种,根据开发经验,接触过两种方式. 方法一:Android向H5注入全局js对象,也就是H5调Android 1.首先对WebVie ...

  2. Android - 和其他APP交互 - 获得activity的返回值

    启用另一个activity不一定是单向的.也可以启用另一个activity并且获得返回值.要获得返回值的话,调用startActivityForResult()(而不是startActivity()) ...

  3. Android - 和其他APP交互 - 把用户带到其他app

    Android的重要功能之一就是app可以根据要执行的操作让用户启动另外一个app.例如,app有一个商业地址然后想要在地图上显示,并不需要在app中加一个显示地图的activity,可以直接用Int ...

  4. [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 [ ...

  5. android json解析及简单例子+Android与服务器端数据交互+Android精彩案例【申明:来源于网络】

    android json解析及简单例子+Android与服务器端数据交互+Android精彩案例[申明:来源于网络] android json解析及简单例子:http://www.open-open. ...

  6. Appium - WebView測试(Android)

    Appium - WebView測试 作者: Max.Bai 时间: 2015/07 Appium - WebView測试(Android) 如今App都是混合型的.有原生的也包括WebView的,a ...

  7. Android原生和H5交互;Android和H5混合开发;WebView点击H5界面跳转到Android原生界面。

    当时业务的需求是这样的,H5有一个活动商品列表的界面,IOS和Android共用这一个界面,点击商品可以跳转到Android原生的商品详情界面并传递商品ID:  大概就是点击H5界面跳转到Androi ...

  8. Android与JavaScrip进行交互(二)

    一.思路分析 经过測试发现,JS中的点击事件仅仅能写一个,假设写了多个,也仅仅会响应第一个,假设写的方法是android端的方法,在web端执行时,后台会报没有定义这种方法的错误.前台点击无响应. 所 ...

  9. android与js的交互之jsbridge使用

    众所周知,app的一些功能可能会使用到H5开发,这就难免会遇到java与js 的相互调用,android 利用WebViewJavascriptBridge 实现js和java的交互,这里介绍下JsB ...

随机推荐

  1. linux ‘|’ 与重定向 实例详解

    重定向与管道 ----------小命令大作为 >:重定向标准输入出定向命令 用的最多的就是向某个文件中写入内容 [root@localhost ~]# echo "Hello,wor ...

  2. 阅读笔记 火球UML大战需求分析3

    在复习回顾的以前所学的UML 统一建模语言之后,要将他们融会贯通起来,必定要进行一次事件,这样才能更好地运用各种UML,所以,了解了所有的UML图之后,就要开始接收一个练习的项目了. 这里作者给的例子 ...

  3. img和css背景的选择

    在什么情况下更适合使用HTML IMG标签来显示一个图像,而不是一个CSS有背景图像,反之亦然? 如下场景使用img标签比较合适: 1.如果图像是等内容的一部分或图表或人(真正的人,而不是股票图人), ...

  4. an interview question(4)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 写这篇博客前请让博主先吐糟下自己的PC. i3+2G内存+开了一上午=C盘剩下0字节+打开VS2012花了半个小时+一晚上的心情不好 吐槽完PC, ...

  5. 让Java和MySQL连接起来

    Java 连接 MySQL 需要驱动包,可以下载菜鸟教程提供的 jar 包:http://static.runoob.com/download/mysql-connector-java-5.1.39- ...

  6. VIM小技巧

    1.复制多行 vi编辑器中的整行(多行)复制与粘贴就非常必要了. 1.复制 1)单行复制 在命令模式下,将光标移动到将要复制的行处,按"yy"进行复制: 2)多行复制 在命令模式下 ...

  7. red hat安装mysql二进制包

    数据包命名格式解释 mysql-5.7.15-linux-glibc2.5-x86_64.tar.gz 黑色粗体表示为包名称 蓝色表示linux系统二进制包 红色表示构架     1.上传mysql- ...

  8. 20161117__安装Qt5.3.2

    1.strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX 2.yum install libGL-devel 2.在安装 Qt5.3.2x86的时候,会报错 ...

  9. OnTimer

    OnTimer不是多线程. OnTimer是以SendMessage的方式发送消息到消息队列. sendMessage必须等待对话框响应完消息后才返回.

  10. Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 更新关系数据

    Updating related data¶ 7 of 7 people found this helpful The Contoso University sample web applicatio ...