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中的视频全屏的相关操作,布布扣,bubuko.com

时间: 2024-10-01 11:47:44

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

Android解决WebView的定位功能、视频全屏播放、下载功能、页面Url的处理、进度条处理

解决WebView的定位功能.视频全屏播放.下载功能.页面Url的处理.进度条处理 事先说明: 定位功能在安卓6.0需要用户手动确认权限后才能使用 若需在安卓6.0适配WebView的定位功能,则需要在WebView中手动增加用户权限访问 详细可百度安卓6.0权限管理系统,或者采用第三方封装好的权限管理类进行编写(如Bmob) 如果对内容不理解的话,可参考最后的整个类的代码 如果对BaseActivity这个抽象类不理解的话,可以查看下面一篇文章对BaseActivity的介绍 步骤一:webv

手机影音第九天,控制视频全屏播放与退出全屏播放,音量调节按钮来控制视频音量与静音的实现

代码以托管到码云,有兴趣的小伙伴可以下载看看 https://git.oschina.net/joy_yuan/MobilePlayer 一.视频全屏播放与退出全屏 系统默认的videoview类,没有调整大小的方法,因此需要自定义一个类,继承videoview,然后重写里面的三个构造方法,再自定义一个调整视频播放页面大小的方法. 1.布局文件 同时,在视频播放的布局文件中,videoview布局要引用上面自定义的类. <?xml version="1.0" encoding=&

仿QQ视频全屏界面旋转实现

// 实现效果:界面支持系统自动转屏和点击转屏 // ViewController.m // rotatoTest // Copyright © 2016年 yaoyao. All rights reserved. // 1.关闭系统自动转屏 // 2.获取设备方向,设置转屏, // 3.点击按钮,设置转屏 #import "ViewController.h" #import <UIKit/UIKit.h> #import <CoreGraphics/CoreGrap

Android webview 退出时关闭声音 4.视频全屏 添加cookie

全屏问题,可以参考 http://bbs.csdn.net/topics/390839259,点击 webView = (WebView) findViewById(R.id.webView); videoview = (FrameLayout) findViewById(R.id.video_view); chromeClient = new WebChromeClient() { // 播放网络视频时全屏会被调用的方法 @Override public void onShowCustomVi

Android WebView中软键盘会遮挡输入框相关问题

要想实现这样的软键盘出现的时候会自己主动把输入框的布局顶上去的效果,须要设置输入法的属性,有下面两种设置方式: 一.在java代码中设置例如以下: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE| WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 二.在androidmanifest.xml中设置与其相应的activity的属性

webView中播放视频时自动旋转

在实际生活应用中,我们希望用户在点击视频时一打开的时候就自动全屏播放,达到更加绚丽的视觉体验效果: ****** Appdelegate.h ** 类中***** #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @property(nonatomic,assign)B

百度ueditor富文本编辑器上传视频设置封面和禁止视频全屏、下载功能

最近在工作中用到了ueditor,这个最开始不是我接入到后台管理系统的,我半路接手,百度官方给的文档又写的很一般,不易理解,所以有很多问题解决的很麻烦. 在使用ueditor过程中,目前遇到的一些问题: 我们公司运营需要用ueditor实现微信公众号文章的编写,之前她们是直接把微信公众号文章复制到ueditor编辑器中,这样子是可以直接使用的.这样带来的一个问题是, 如果文章里有视频播放的话,视频的播放源全都是腾讯视频,我们公司商务反对了这种行为,所以运营提出文章内的视频由本地上传或者使用第三方

Android中界面实现全屏显示的两种方式

在开发android的应用当中,我们会遇到将一些界面设置为全屏显示的格式,有两种实现的方法.其一是在Java代码中实现,其二是在配置文件中实现. 1. 在Java代码中设置 super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); //无title getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, Window

QT中关于窗口全屏显示与退出全屏的实现

近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一些关于这方面的答案,希望能给大家一些帮助. 首先,在QT中对于窗口显示常用的有这么几个方法可以调用: Qt全屏显示函数            showFullScreen() Qt最大化显示函数         showMaximized()Qt最小化显示函数         showMinimized()Qt固定尺寸显示函数      resize(x,y)Qt设置最大尺寸函数      setMaximum