WebView中的视频全屏的相关操作
近期工作中,基本一直在用WebView,今天就把它整理下:
WebView 顾名思义,就是放一个网页,一个看起来十分简单,可是用起来不是那么简单的控件。
首先你肯定要定义,初始化一个webview,事实上网上的样例非常多,我这里就简单的把一些WebView 中可能会用到的的非常重要的属性以及支持全屏播放视频该怎么实现的代码粘出来,直接放到项目中去即可了
<span style="white-space:pre"></span><pre name="code" class="java" style="font-size:18px;"><span style="white-space:pre"> </span>private WebView webview;<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
<span style="white-space:pre"> </span>webview = (WebView) findViewById(R.id.webview);
<span style="white-space:pre"> </span>// 设置WebView属性,可以运行Javascript脚本
webview.getSettings().setJavaScriptEnabled(true);
//设置WebView 可以载入很多其它格式页面
<span style="white-space:pre"> </span>webview.getSettings().setLoadWithOverviewMode(true);
//设置WebView使用广泛的视窗
<span style="white-space:pre"> </span>webview.getSettings().setUseWideViewPort(true);
//设置WebView的用户代理字符串。假设字符串“ua”是null或空,它将使用系统默认的用户代理字符串
<span style="white-space:pre"> </span>webview.getSettings().setUserAgentString();
//支持手势缩放
<span style="white-space:pre"> </span>webview.getSettings().setBuiltInZoomControls(true);
//支持2.2以上全部版本号
<span style="white-space:pre"> </span>webview.getSettings().setPluginState(PluginState.ON);
//告诉webview启用应用程序缓存api。
<span style="white-space:pre"> </span>webview.getSettings().setAppCacheEnabled(true);
//设置是否启用了DOM storage API。
<span style="white-space:pre"> </span>webview.getSettings().setDomStorageEnabled(true);
//自己主动打开窗体
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
// 没有的话会黑屏 支持插件
webView.getSettings().setPluginsEnabled(true);
/**
* setAllowFileAccess 启用或禁止WebView訪问文件数据 setBlockNetworkImage 是否显示网络图像
* setBuiltInZoomControls 设置是否支持缩放 setCacheMode 设置缓冲的模式
* setDefaultFontSize 设置默认的字体大小 setDefaultTextEncodingName 设置在解码时使用的默认编码
* setFixedFontFamily 设置固定使用的字体 setJavaSciptEnabled 设置是否支持Javascript
* setLayoutAlgorithm 设置布局方式 setLightTouchEnabled 设置用鼠标激活被选项
* setSupportZoom 设置是否支持变焦
* */
// 排版适应屏幕
.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);web
// 设置Web试图 注意下面两个方法十分重要,非常多须要重写:
<span style="white-space:pre"> </span>//首先设置自己定义的WebChromeClient来设置视频播放的一些问题
busWiFiWebView.setWebChromeClient(new DefaultWebChromeClient());
busWiFiWebView.setWebViewClient(new DefaultWebViewClientClient());
第一个方法:WebChromeClient:
//要重写当中的onShowCustomView 方法 表示进入全屏的时候,以及onHideCustomView 表示退出全屏的时候
界面的话,就是一个webview ,一个FrameLayout ,当全屏的时候就设置webview 隐藏,让FrameLayout全屏显示出来,那么视频就自己主动跑到FrameLayout这里面放了。退出全屏的时候,一样道理,这里要用到回调函数,自己理解吧。。。我讲的不好。。。
private class DefaultWebChromeClient extends WebChromeClient {
// 一个回调接口使用的主机应用程序通知当前页面的自己定义视图已被撤职
CustomViewCallback customViewCallback;
// 进入全屏的时候
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
// 赋值给callback
customViewCallback = callback;
// 设置webView隐藏
webview.setVisibility(View.GONE);
// 声明video,把之后的视频放到这里面去
FrameLayout video = (FrameLayout) findViewById(R.id.video);
// 将video放到当前视图中
video.addView(view);
// 横屏显示
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// 设置全屏
setFullScreen();
}
// 退出全屏的时候
@Override
public void onHideCustomView() {
if (customViewCallback != null) {
// 隐藏掉
customViewCallback.onCustomViewHidden();
}
// 用户当前的首选方向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
// 退出全屏
quitFullScreen();
// 设置WebView可见
webview.setVisibility(View.VISIBLE);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
}
以下是两个方法,设置全屏和退出全屏的方法:注意,我捕捉到了,全屏状态下和窗体状态下他们分别的Flags数值。可见例如以下代码
/**
* 设置全屏
*/
private void setFullScreen() {
// 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 全屏下的状态码:1098974464
// 窗体下的状态吗:1098973440
} /**
* 退出全屏
*/
private void quitFullScreen() {
// 声明当前屏幕状态的參数并获取
final WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setAttributes(attrs);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
第二个自己定义的WebViewClient,继承WebViewClient
/**
* 使用系统默认webview
*/
private class DefaultWebViewClientClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
<span style="white-space:pre"> </span>return super.shouldOverrideUrlLoading(view, url);
//假设要下载页面中的游戏或者继续点击网页中的链接进入下一个网页的话,重写此方法下,不然就会跳到手机自带的浏览器了,而不继续在你这个webview里面展现了
} @Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
<span style="white-space:pre"> </span>//想在收到错误信息的时候,运行一些操作,走此方法
} @Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
//想在页面開始载入的时候,运行一些操作,走此方法
} @Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
//想在页面载入结束的时候,运行一些操作,走此方法
}
}
最后另一点非常重要,要想进入同过webview浏览网页,并且点返回键是想在webview中返回,而不是直接退出程序,那么就得重写onKeyDown方法。还有
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) {
WebView webView = (WebView) findViewById(R.id.webview_passenger);
if (webView.canGoBack()) {
// goBack()表示返回WebView的上一页面
webView.goBack();
//退出全屏
quitFullScreen();
} else { }
return true;
}
return super.onKeyDown(keyCode, event);
}
有什么问题,能够联系我哈,就在以下留言就好啦,天天在线的。。。
恩,综上,就这么多了,研究了好几天。附上一份不错的Demo吧,原Demo要3点积分,我作为VIP就免费下下来给大家了
Demo下载地址:http://download.csdn.net/detail/lygscg123/7673123
WebView中的视频全屏的相关操作的更多相关文章
- iOS端一次视频全屏需求的实现(转)
对于一个带有视频播放功能的app产品来说,视频全屏是一个基本且重要的需求.虽然这个需求看起来很简单,但是在实现上,我们前后迭代了三套技术方案.这篇文章将介绍这三种实现方案中的利弊和坑点,以及实现过程中 ...
- iOS 视频全屏功能 学习
项目中,也写过类似"视频全屏"的功能, 前一阵子读到今日头条 的一篇技术文章,详细介绍三种旋转方法差异优劣最终择取.文章从技术角度看写的非常好,从用户角度看,也用过多家有视频功能的 ...
- 解决VMware中Ubuntu18.04全屏问题
在VMware中Ubuntu18.04全屏问题 在虚拟机机中安装完Ubuntu18.04之后界面显示的特别小,默认的好像是800*600分辨率,看着不舒服.先是在设置->设备->显示 ...
- Android webview 退出时关闭声音 4.视频全屏 添加cookie
全屏问题,可以参考 http://bbs.csdn.net/topics/390839259,点击 webView = (WebView) findViewById(R.id.webView); vi ...
- video 在微信中,安卓全屏和ios上如何内联播放?H5同层播放器相关接入规范
今天在做一个分享页面的时候需要播放视屏用了video,然后各种坑开始了: <video src="http://xxx.mp4 " id="myVideo" ...
- Android WebView中软键盘会遮挡输入框相关问题
要想实现这样的软键盘出现的时候会自己主动把输入框的布局顶上去的效果,须要设置输入法的属性,有下面两种设置方式: 一.在java代码中设置例如以下: getWindow().setSo ...
- DirectX Graphics Infrastructure (DXGI) 全屏设置相关问题
原文地址: https://msdn.microsoft.com/en-us/library/windows/desktop/ee417025(v=vs.85).aspx 未完待续... DXGI是在 ...
- H5项目常见问题及注意事项,视频全屏,定位,屏幕旋转和触摸,偏页面重构向 来源joacycode的github
Meta基础知识: H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 //一.HTML页面结构 <meta name="viewport" content="wi ...
- ppt转flash kindeditor上传视频全屏问题
最近要增加页面的ppt显示功能,于是考虑把ppt转成flash,在网上搜到了ispingfree,链接: https://pan.baidu.com/s/1QZzx6qmdsnwzWCuULXzUOw ...
随机推荐
- linux进程创建
1. 进程是程序的执行,会被加载到内存中,每个进程包括程序的代码和数据,其中数据包括程序的变量的数据,外部数据,程序堆栈. 2. Linux中,输入命令,如vi main.c 通过shell来执行, ...
- 想追赶.Net的脚步?Java面前障碍重重
待到Java 8面世之时 .Net的进度时钟恐怕已经又走过了两到五年——届时微软做出的调整将使二者差距进一步拉大. 就在几周之前,我详细介绍了Java 8中值得期待的几大主要功能.不过当时我并没有提到 ...
- [转]JS继承的5种实现方式
参考链接: http://yahaitt.iteye.com/blog/250338 虽说书上都讲过继承的方式方法,但这些东西每看一遍都多少有点新收获,所以单独拿出来放着. 1. 对象冒充 funct ...
- 编写可维护的javascript代码--- 2015.11.21(基本格式化)
1.1 每行的编码需要控制在80字符. 1.2 改用:的地方必须用上. 1.3 缩进用2个制表符,不过4个也可以. 1.4 当代码一行显示不全需要折行显示,这里我暂且假定缩进为4个字符. 1.5 如果 ...
- 『Python』 多线程 端口扫描器
0x 00 Before Coding 当端口打开时,向端口发送 TCP SYN 请求,会返回一个 ACK 响应: 当端口关闭,返回的是 RST 响应: 0x 01 Coding 可以用 socke ...
- 转载——web前端相关资源总结
前端牛人博客:张克军.阮一峰.拔赤(李晶).拔赤(李晶)2.张鑫旭.梦想天空.阿当.泽飞.刘杰(嗷嗷).为之漫笔(李松峰).goddyzhao.hax的技术部落.周爱民.随网之舞.子鼠.司徒正美.ju ...
- JAVA简单的SWING及AWT
慢慢找感觉~~ package SwingGui.sky.com; import javax.swing.*; import java.awt.*; import java.awt.event.*; ...
- Xamarin.Forms Hello word
创建项目 XMD1右键->添加->新建项目 MDPage:MasterDetailPage 主窗体,导航与明细的布局窗体. 指定MenuPage.xaml 作为Master <?xm ...
- BitmapFactory.decodeResource(res, id); 第一个参数跟第二个参数有什么关系?
BitmapFactory.decodeResource(res, id); res= getResources();activity的方法 id = R.drawable.x
- v$session_wait p1 p1raw p1_16
SQL> select * from v$mystat where rownum<2; SID STATISTIC# VALUE ---------- ---------- ------- ...