WebView使用和遇到的问题

xiaoxiao2021-02-28  141

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; } });
转载请注明原文地址: https://www.6miu.com/read-19368.html

最新回复(0)