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

近期工作中,基本一直在用WebView,今天就把它整理下:

WebView 顾名思义,就是放一个网页,一个看起来十分简单,可是用起来不是那么简单的控件。

首先你肯定要定义,初始化一个webview,事实上网上的样例非常多,我这里就简单的把一些WebView 中可能会用到的的非常重要的属性以及支持全屏播放视频该怎么实现的代码粘出来,直接放到项目中去即可了



第一个方法: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) {
最后另一点非常重要,要想进入同过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.****.net/detail/lygscg123/7673123