Android 中WebView的使用详解

简介: Android 中WebView的使用详解

前言: 通过WebView控件可以实现加载网页的效果。

  1. 加载URL(网络或者本地assets文件夹下的html文件)
  2. 加载html代码
  3. Native和JavaScript的相互调用

一、加载网页的方法:

  1. 加载网络URL
    webView.loadUrl(“https://m.baidu.com”);
  2. 加载assets目录下的html文件
    webView.loadUrl(“file:///android_asset/web.html”);
  3. 加载html代码
    webView.loadData();
    webView.loadDataWithBaseURL();

二、网页的前进与后退: 相关的几个方法

  1. webView.canGoBack() 当前页面是否可以返回
  2. webView.goBack() 返回当前页面
  3. webView.canGoForward() 当前页面是否可以向前
  4. webView.goForward() 向前进入下一个页面
  5. webView.canGoBackOrForward(int steps) 当前页面是否可以返回或者进入下一个页面 返回值为boolean
  6. webView.goBackOrForward(int steps) 当前页面要前进或者后退几步

三、接下来我们以访问网络百度移动站点进行演示

1.首先实现布局页面activity_web_view.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".WebViewActivity"
    android:orientation="vertical"
    >
    <WebView
        android:id="@+id/wv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</LinearLayout>

2.在WebViewActivity中进行加载网页的操作:

public class WebViewActivity extends AppCompatActivity {
    private static final String TAG = "WebViewActivity";
    private WebView wv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        wv = findViewById(R.id.wv);
        //加载本地中的html文件
//        wv.loadUrl("file:///android_asset/web.html");
        //设置支持js否则有些网页无法打开
        wv.getSettings().setJavaScriptEnabled(true);
        wv.setWebViewClient(new MyClient());
        wv.setWebChromeClient(new MyWebChromeClient());
        //加载网络url
        wv.loadUrl("https://m.baidu.com");
    }
    class MyClient extends WebViewClient{
        //监听到页面发生跳转的情况,默认打开web浏览器
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            //在webView中加载要打开的链接
            view.loadUrl(request.getUrl().toString());
            return true;
        }
        //页面开始加载
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            Log.e(TAG, "onPageStarted: ");
        }
        //页面加载完成的回调方法
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            Log.e(TAG, "onPageFinished: ");
            //在webView中加载js代码
            wv.loadUrl("javascript:alert('hello')");
        }
    }
    class MyWebChromeClient extends WebChromeClient{
        //监听网页进度 newProgress进度值在0-100
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
        }
        //设置Activity的标题与 网页的标题一致
        @Override
        public void onReceivedTitle(WebView view, String title) {
            super.onReceivedTitle(view, title);
            setTitle(title);
        }
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        //如果用户按的是返回键 并且WebView页面可以返回
        if (keyCode==event.KEYCODE_BACK&&wv.canGoBack()){
            //让WebView返回
            wv.goBack();
            return true;
        }
        //如果WebView不能返回 则调用默认的onKeyDown方法 退出Activity
         return super.onKeyDown(keyCode, event);
    }
}

具体注释已经在代码中给出!


目录
相关文章
|
API Android开发 数据安全/隐私保护
解决android webview 加载http url 失败 net::ERR_CLEARTEXT_NOT_PERMITTED 错误
解决android webview 加载http url 失败 net::ERR_CLEARTEXT_NOT_PERMITTED 错误
1097 0
|
2月前
|
程序员 开发工具 Android开发
Android|WebView 禁止长按,限制非白名单域名的跳转层级
如何限制 WebView 仅域名白名单网址能随意跳转,并禁用长按选择文字。
44 2
|
6月前
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
6月前
|
JavaScript 前端开发 Android开发
kotlin安卓在Jetpack Compose 框架下使用webview , 网页中的JavaScript代码如何与native交互
在Jetpack Compose中使用Kotlin创建Webview组件,设置JavaScript交互:`@Composable`函数`ComposableWebView`加载网页并启用JavaScript。通过`addJavascriptInterface`添加`WebAppInterface`类,允许JavaScript调用Android方法如播放音频。当页面加载完成时,执行`onWebViewReady`回调。
|
6月前
|
Web App开发 移动开发 前端开发
52. 【Android教程】网页视图:WebView
52. 【Android教程】网页视图:WebView
103 1
|
5月前
|
Web App开发 JavaScript 前端开发
Android端使用WebView注入一段js代码实现js调用android
Android端使用WebView注入一段js代码实现js调用android
142 0
|
6月前
|
安全 网络安全 API
kotlin安卓开发JetPack Compose 如何使用webview 打开网页时给webview注入cookie
在Jetpack Compose中使用WebView需借助AndroidView。要注入Cookie,首先在`build.gradle`添加WebView依赖,如`androidx.webkit:webkit:1.4.0`。接着创建自定义`ComposableWebView`,通过`CookieManager`设置接受第三方Cookie并注入Cookie字符串。最后在Compose界面使用这个自定义组件加载URL。注意Android 9及以上版本可能需要在网络安全配置中允许第三方Cookie。
|
7月前
|
XML Android开发 数据格式
安卓和webview交互
安卓和webview交互
63 0
|
7月前
|
XML Android开发 数据格式
安卓和webview交互
安卓和webview交互
107 1
|
小程序 Android开发 iOS开发
在钉钉小程序中安卓无法打开webview
在钉钉小程序中安卓无法打开webview
221 1