一、主布局文件

<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. Unity仪表盘显示UGUI制作小心得

    最近在做设备仪表参数参数显示,由于模型摆放位置经常修改,加之要求不能在模型的下面添加东西,显示界面的位置也不得不跟着修改,一来二去就烦了,想了解决办法,现在总结如下: 1.仍然在模型下面新建Panel ...

  2. html5移动端知识点总结

    第一章,控制html字体大小 1.1使用媒体查询,不同分辨率设置不同的html的font-size   @(min-width:320px){ html{font-size:10px;} } @(mi ...

  3. 微信touchmove不生效

    最近在写一个微信里面滑动切换图片的功能,发现在chrome下都正常显示,可是在微信和qq浏览器里面就是不行. 经过一番排查,发现了问题: touchmove只触发了一次. 解决方案: 在touchst ...

  4. TCP/IP详解学习笔记

    TCP/IP详解学习笔记(1)-基本概念 TCP/IP详解学习笔记(2)-数据链路层 TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议 TCP/IP详解学习笔记(4)-ICMP协议, ...

  5. 数据源增量处理(Delta Proess)三大属性:Recod Mode、Delta Type、Serialization

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. About LIS(Longest Increasing Subsequence)

    今天528给讲了基础的DP,其中第一道例题就是最长不下降子序列——LIS. 题目简述:给出N个数,求最长不下降子序列的长度. 数据范围:30% N<=1000 ; 100% N<=1000 ...

  7. Makefile中头文件在依赖关系中作用

    摘于:http://bbs.csdn.net/topics/120024677 (1)在makefile的依赖关系中用不用体现.h头文件?(2)如果在依赖关系中要体现.h头文件,应该体现到什么层次?= ...

  8. java中观察者模式Observable和Observer

    25.java中观察者模式Observable和Observer 如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口 观察者设计模式 现在很多的 ...

  9. 本周psp(观众页面)

    个人项目PSP(观众页面) 计划 30min 估计要用多长时间 3d 开发 5h 需求分析 1h 生成设计文档 1h 设计复审 50min 代码规范 20min 具体设计 40min 具体编码 3h ...

  10. Eclipse Building Workspace 解决办法

    Eclipse 一直不停 building workspace... android开发论坛 juapk 完美解决总结 一.产生这个问题的原因多种 1.自动升级 2.未正确关闭  3.maven下载l ...