WebView使用和遇到的问题

本文介绍WebView的基础使用方法,包括如何设置JavaScript交互、视频全屏播放的支持及处理横竖屏切换等问题,同时提供拦截WebView内部URL请求的技术方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.WebView基础使用

代码:

//获取配置,设置webview
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);

webView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        //在当前的webview显示网页,否则会调用系统默认的浏览器打开网页
        return false;
    }
});
webView.loadUrl("http://www.baidu.com");

2.视频全屏

项目中webview打开的网页嵌有视频,例如爱奇艺的网页,但是全屏按钮无效,查看官方文档后发现

这里写图片描述

为支持在线H5视频播放,必须开启硬件加速,并且设置WebChromeClient,全屏模式还需要实现onShowCustomView()onHideCustomView()

2.1.打开硬件加速

Application或者相应Activity标签下添加android:hardwareAccelerated="true"即可,

2.2.实现的两个方法

这里写图片描述
onShowCustomView()在显示全屏的时候调用,并将显示参数view,回调接口在取消全屏的时候要调用callback.onCustomViewHidden()

onHideCustomView()在取消全屏的时候调用。

只需要在两个重写方法里处理要显示的view的逻辑即可。

布局代码:

<?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">

    <!-- 添加和删除要全屏显示的view,默认隐藏 -->
    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:visibility="gone"/>

    <!-- 正常显示网页的webview -->
    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

代码:

webView.setWebChromeClient(new WebChromeClient() {

    @Override
    public void onShowCustomView(View view, CustomViewCallback callback) {
        webView.setVisibility(View.GONE); //隐藏webview,显示ll并添加要全屏的view
        ll.setVisibility(View.VISIBLE);
        ll.addView(view);
        viewCallback = callback; //获取callback
        super.onShowCustomView(view, callback);
    }

    @Override
    public void onHideCustomView() {
        ll.removeAllViews(); //ll删除全屏view,并隐藏,再显示webview
        ll.setVisibility(View.GONE);
        webView.setVisibility(View.VISIBLE);
        if (viewCallback != null)
            viewCallback.onCustomViewHidden(); //接口调用取消全屏
        super.onHideCustomView();
    }
});
webView.loadUrl("http://www.iqiyi.com/v_19rrmucyoc.html");

但这样的效果只是竖屏的全屏,需要横屏处理。

注意:横竖屏处理要在manifests文件里的相应activity标签中声明android:configChanges="keyboardHidden|orientation|screenSize",否则页面会销毁重建,视频播放进度就重置了,特别注意4.0以后必须加上screenSize

代码:

private void changeOrientation() {
    int orientation = getResources().getConfiguration().orientation;
    setRequestedOrientation(orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ?
            ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

在调用两个实现方法之前都调用横竖屏转换的方法即可。

3.拦截请求

WebViewClient中重写shouldOverrideUrlLoading方法可以拦截页面内的url请求

返回true表示系统处理请求,false表示本地webview处理请求
代码:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        //根据url处理,支付跳转原生页面或者其他逻辑
        return false;
    }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值