专栏首页刘晓杰WebView浏览本地html

WebView浏览本地html

1.准备html文件

index.html放在Assets文件夹下,供WebChromeClient调用

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试JavaScript三种不同的对话框</title>
<script language="JavaScript">
    function alertFun() {
        alert("Alert警告对话框!-你好吗?");
    }
    function confirmFun() {
        if (confirm("访问搜狐?")) {
            location.href = "http://www.sohu.com";
        } else {
            alert("取消访问!");
        }
    }
    function promptFun() {
        var word = prompt("请输入您最想说的一句话", null);
        if (word) {
            alert("您说:" + word);
        } else {
            alert("呵呵,您沉默了!");
        }
    }
</script>
</head>
<body>
    <p>三种对话框示例</p>
    <p>Alert对话框-你好啊!</p>
    <p>
        <input type="submit" name="Submit" value="按钮1" onclick="alertFun()" />
    </p>

    <p>Confirm对话框-是否访问搜狐!</p>
    <p>
        <input type="submit" name="Submit2" value="按钮2" onclick="confirmFun()" />
    </p>

    <p>Prompt对话框-告诉我你想说的话!</p>
    <p>
        <input type="submit" name="Submit3" value="按钮3" onclick="promptFun()" />
    </p>

</body>
</html>

2.建立Android工程文件(WebViewDemo2)

先编写main.xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.webviewdemo2.MainActivity" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="请输入网址:" />

    <EditText
        android:id="@+id/path"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:text="file:///android_asset/index.html"/>
    <!-- 注意,file后面必须要有三个斜杠 -->

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="加载" />

    <WebView
        android:id="@+id/webView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

MainActivity.java

package com.example.webviewdemo2;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
    private EditText path;
    private Button button;
    private WebView myWebView;

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

        path = (EditText) findViewById(R.id.path);
        button = (Button) findViewById(R.id.button1);
        myWebView = (WebView) findViewById(R.id.webView1);

        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setAllowFileAccess(true);
        webSettings.setBuiltInZoomControls(true);

        myWebView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onJsAlert(WebView view, String url, String message,
                    final JsResult result) {
                new AlertDialog.Builder(MainActivity.this)
                        .setTitle("Alert对话框")
                        .setMessage(message)
                        .setPositiveButton(
                                android.R.string.ok,
                                new android.content.DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                        result.confirm();
                                    }
                                }).setCancelable(false).show();
                return true;
            }

            @Override
            public boolean onJsConfirm(WebView view, String url,
                    String message, final JsResult result) {
                new AlertDialog.Builder(MainActivity.this)
                        .setTitle("Confirm对话框")
                        .setMessage(message)
                        .setPositiveButton(
                                android.R.string.ok,
                                new android.content.DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                        result.confirm();
                                    }
                                })
                        .setNegativeButton(
                                android.R.string.cancel,
                                new android.content.DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                        result.cancel();
                                    }
                                }).setCancelable(false).show();
                return true;
            }

            @Override
            public boolean onJsPrompt(WebView view, String url, String message,
                    String defaultValue, final JsPromptResult result) {
                final View dialogView = getLayoutInflater().inflate(
                        R.layout.prompt_view, null);

                new AlertDialog.Builder(MainActivity.this)
                        .setView(dialogView)
                        // 要加布局直接在这里加,EditText也有焦点,网上的解决方案全错的
                        .setTitle("Prompt对话框")
                        .setMessage(message)
                        .setPositiveButton(
                                android.R.string.ok,
                                new android.content.DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                        String valueString = ((EditText) dialogView
                                                .findViewById(R.id.edit))
                                                .getText().toString();
                                        result.confirm(valueString);
                                    }
                                })
                        .setNegativeButton(
                                android.R.string.cancel,
                                new android.content.DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                        result.cancel();
                                    }
                                }).show();
                return true;
            }

        });

        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String url = path.getText().toString();
                myWebView.loadUrl(url);
            }
        });
    }
}

onJsPrompt里面用到了prompt_view.xml

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入你想说的话:"
        android:background="@android:drawable/edit_text" />
</LinearLayout>

效果展示:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android开发笔记(一百二十九)使用变换图形

    ClipDrawable可设置图形的裁剪幅度,它的构造函数除了指定来源图形之外,还可以指定图形的裁剪方式(从开始裁剪还是从中间裁剪还是从末尾裁剪),以及裁剪...

    用户4464237
  • Android开发笔记(十一)自定义视图的构造方法

    Android自带的视图常常不能满足实际开发的需求,这种情况下我们就得自定义视图(View)。 首先在res\values目录下找到attrs.xml(如...

    用户4464237
  • 使用hibernate基本步骤

    Pom.xml 中导入需要使用的jar包(可以直接百度maven repository查找你需要的jar包)

    微醺
  • 推荐一个优秀的c++源代码,TinyXml2

    项目主页:http://grinninglizard.com/tinyxml2docs/index.html

    用户1539362
  • Activity的启动模式

    在Android程序中,应用程序通过活动栈来管理Activity,活动栈中有多少个Activity对象,我们在退出程序的时候就要按多少下返回键(即要将活动栈中的...

    指点
  • 用户尝试登陆错误次数

    由于我们将使用shiro + ehache配合使用,所以可以不用单独再引用ehcache.jar了,使用shiro-ehcache时,会自动添加ehcache-...

    微醺
  • Android自定义View

    前几天在郭霖大神的博客上看了自定义View的知识,感觉受益良多,大神毕竟大神。在此总结一下关于Android 自定义View的用法:

    指点
  • Android开发笔记(八十四)使用Properties读写属性值

    Java中的配置文件常为.properties文件,而Properties类便是读写此类文件的工具。属性文件有两种格式,一种是文本格式,其内容是“键=值”的...

    用户4464237
  • 使用 Intent 启动 Activity和Activity之间的数据传递

    在Android 程序之中,Activity 对象时和用户交互的唯一手段,几乎每个 Android 项目程序都有多个 Activity。因此,灵活的在屏幕上切换...

    指点
  • springboot和redis的结合使用

    微醺

扫码关注云+社区

领取腾讯云代金券