WebView中的视频全屏的相关操作

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118853.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • sqlserver日期格式化年月_calendar格式化日期

    sqlserver日期格式化年月_calendar格式化日期SQLServer日期格式化SelectCONVERT(varchar(100),GETDATE(),0):0516200610:57AMSelectCONVERT(varchar(100),GETDATE(),1):05/16/06SelectCONVERT(varchar(100),GETDATE(),2):06.05.16SelectCONVE…

    2022年10月21日
  • 使用navicat 链接数据库时乱码

    使用navicat 链接数据库时乱码

  • 网络安全工具使用集锦手册下载_网络安全科普书籍

    网络安全工具使用集锦手册下载_网络安全科普书籍常用工具:Nmap使用详解 Sqlmap使用详解 CobaltStrike的使用 MetasploitFramework(MSF)的使用 CobaltStrike上线微信提醒 CobaltStrike的argue参数污染绕AV CobaltStrike证书修改躲避流量审查 CobaltStrike上线Linux主机(CrossC2)域内工具:Linux下使用ldapsearch进行域信息查询 ADExplorer和TheLDAPExplorer工具的用法 ADSI(Act

    2022年10月19日
  • Matlab常用绘图颜色搭配[通俗易懂]

    Matlab常用绘图颜色搭配[通俗易懂]推荐几款常用的离散色系搭配,并且附带matlab箱线图作为实例参考!

  • ie8是什么时候出的_ie8.0是什么意思

    ie8是什么时候出的_ie8.0是什么意思IE8beta2来了,这次的beta2比起beta1有了长足的进步。功能已经不比firefox差,还有不少胜出的地方。在这两个地方有一些评测,从中可以看出其特色:http://bbs.maxthon.cn/viewthread.php?tid=102092http://publish.it168.com/2008/0828/20080828031601.shtml号称完全支持…

    2022年10月30日
  • 学java用什么编译器_学习Java用什么编译软件好

    学java用什么编译器_学习Java用什么编译软件好在线的java编译器和在线运行帮助我们轻松编译代码直接在浏览器上显示。java编译器网络版成为有用的在许多情况下。例如,假设你正在编写一个java代码,但不在自己的计算机上,减少时间的浪费,可以无需下载和安装任何软件,使用免费的在线工具运行代码。也就很有帮助,如果不需要编写java代码而定期一周甚至一天几次。增加电脑的速度,减少从您的计算机未使用的软件数量。但如果不想错过它,可以尝试免费的在线编译…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号