测试Android webview 加载本地html

最近开发一个需要未联网功能的App, 不熟悉使用Java原生开发界面,于是想使用本地H5做界面,本文测试了使用本地html加载远程数据。直接上代码:

MainActivity.java

java 复制代码
package com.alex.webviewlocal;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Build;
import android.os.Bundle;
import android.webkit.CookieManager;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class MainActivity extends AppCompatActivity {

    private WebView webView;
    private String url="file:///android_asset/web/index.html";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = findViewById(R.id.webview);
        WebSettings webSettings = webView.getSettings();
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        webSettings.setJavaScriptEnabled(true); // 设置支持javascript
        webSettings.setUseWideViewPort(true);   // 将图片调整到适合webview的大小
        webSettings.setLoadWithOverviewMode(true);  // 缩放至屏幕的大小
        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        webSettings.setUserAgentString("User-Agent");
        webSettings.setLightTouchEnabled(true); // 设置用鼠标激活被选项
        webSettings.setBuiltInZoomControls(true);   // 设置支持缩放
        webSettings.setDomStorageEnabled(true); //设置DOM缓存,当H5网页使用localstorage时,一定要设置
        webSettings.setDatabaseEnabled(true);
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 设置去缓存,防止加载的为上一次加载的数据
        webSettings.setSupportZoom(true);   // 设置支持变焦
        webView.setHapticFeedbackEnabled(false);
        webSettings.setPluginState(WebSettings.PluginState.ON);
        webSettings.setAllowFileAccess(true);
        webSettings.setAllowContentAccess(true);
        webSettings.setAllowUniversalAccessFromFileURLs(true);
        webSettings.setAllowFileAccessFromFileURLs(true);

        webView.loadUrl(url);

//        try{
//            if(Build.VERSION.SDK_INT>=16){
//                Class<?> clazz = webView.getSettings().getClass();
//                Method method = clazz.getMethod(
//                        "setAllowUniversalAccessFromFileURLs", boolean.class);
//                if(method!=null){
//                    method.invoke(webView.getSettings(),true);
//                }
//            }
//        } catch (NoSuchMethodException e) {
//            throw new RuntimeException(e);
//        } catch (InvocationTargetException e) {
//            throw new RuntimeException(e);
//        } catch (IllegalAccessException e) {
//            throw new RuntimeException(e);
//        }
//
//        webView.loadUrl(url);
//        webView.setWebViewClient(new WebViewClient(){
//            @Override
//            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
//                return super.shouldOverrideUrlLoading(view, request);
//            }
//        });

    }
}

activity_main.xml

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
<WebView
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></WebView>
</LinearLayout>

h5 文件

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./vue.min.js"></script>
    <script src="./axios.min.js"></script>
</head>
<body>
    <div id="app">
        <h2>{{message}}</h2>
        <ul>
            <li v-for="user in users" :key="user.id">{{user.name}}</li>
        </ul>
    </div>
    <script>
        var app = new Vue({
            el:'#app',
            data(){
                return {
                    message:'Hello Vue!',
                    users:[]
                }
            },
            mounted(){
                axios.get('https://jsonplaceholder.typicode.com/users').then(response => {
                    this.users = response.data
                }).catch(error => {
                    console.log(error)
                })
            }
        })
    </script>
</body>
</html>

最终效果:

相关推荐
患得患失9491 天前
【前端】【高德地图WebJs】【知识体系搭建】面要素知识点——>多边形,圆形, 矩形,图形编辑器
前端·编辑器·高德地图·amap
马 孔 多 在下雨1 天前
安卓旋转屏幕后如何防止数据丢失-ViewModel入门
android
歪歪1001 天前
webpack 配置文件中 mode 有哪些模式?
开发语言·前端·javascript·webpack·前端框架·node.js
歪歪1001 天前
如何配置Webpack以实现按需加载模块?
开发语言·前端·webpack·node.js
面向星辰1 天前
html各种常用标签
前端·javascript·html
梦6501 天前
HTML新属性
前端
东风西巷1 天前
PDFgear:免费全能的PDF处理工具
前端·pdf·软件需求
Just_Paranoid1 天前
【Settings】恢复出厂设置密码校验
android·python·settings·sha256·hmac-sha256
森之鸟1 天前
Mac电脑上如何打印出字体图标
前端·javascript·macos
mCell1 天前
GSAP 入门指南
前端·javascript·动效