WebView

使用WebView时:必须现在XML中写入布局

 <WebView
            android:id="@+id/webView1"
            style="@style/layout_vertical"
            android:layout_weight="5" />
当然这是项目中的,style只是把宽高写入样式中,以减少代码量,这里是宽布满,高不固定,加一个权重和其他空间联合使用,达到屏幕适应效果。
然后在Activity中:
如果只是简单显示一个Html的网页式界面:
<pre name="code" class="html"><span style="white-space:pre">					</span>fragmentManager =getActivity().getSupportFragmentManager();
					
					webView=(WebView) view.findViewById(R.id.webView1);
					//设置webview的属性,可以执行Javascript脚本 
					webView.getSettings().setJavaScriptEnabled(true);
					//加载需要显示的网页
					webView.loadUrl(PathUrl.URL_XQWeb+id);
					//设置webView视图
					webView.setWebViewClient(new HelloWebViewClient ()); 

		//web视图
		private class HelloWebViewClient extends WebViewClient{
			@Override
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				view.loadUrl(url);
				return true;
			}
		}
当然对于WebView中牵扯到的东西很多:

 
<pre name="code" class="java"><span style="white-space:pre">				</span>// webView = (WebView) findViewById(R.id.webView1);
				// // 设置webview的属性,可以执行Javascript脚本
				// WebSettings settings = webView.getSettings();
				// settings.setBlockNetworkImage(true);// 显示网络图像
				// settings.setUseWideViewPort(true);
				// settings.setLoadWithOverviewMode(true);
				// settings.setJavaScriptEnabled(true);
				// settings.setDatabaseEnabled(true);
				// webView.getSettings().setPluginState(PluginState.ON);

				// // 设置可以支持缩放
				// webView.getSettings().setSupportZoom(true);
				// // 设置默认缩放方式尺寸是far
				// webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
				// // 设置出现缩放工具
				// webView.getSettings().setBuiltInZoomControls(true);
				// webView.getSettings().setUseWideViewPort(true);
				// webView.getSettings().setLoadWithOverviewMode(true);
				// 加载需要显示的网页

				// webView.loadUrl(PathUrl.URL_XQWeb + id);
				// // 设置webView视图
				// webView.setWebChromeClient(new WebChromeClient());
				// webView.setWebViewClient(new WebViewClient() {
				// public boolean shouldOverrideUrlLoading(WebView view, String
				// url) {
				// view.loadUrl(url);
				// return true;
				// }
				// });

这是其中一部分的属性设置可以根据自己的需求去添加。
 
如果WebView中存在视频那么,这样就显然不可以了,需要我们做一些处理:
首先我们要把Activity个充满全屏
<pre name="code" class="java"><span style="white-space:pre">		</span>// 取消标题
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		// 进行全屏
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);


 
然后进行处理:
<pre name="code" class="java">private void initwidget() {
		videoview = (FrameLayout) findViewById(R.id.video_view);
		webView = (WebView) findViewById(R.id.webView1);
		WebSettings ws = webView.getSettings();
		/**
		 * setAllowFileAccess 启用或禁止WebView访问文件数据 setBlockNetworkImage 是否显示网络图像
		 * setBuiltInZoomControls 设置是否支持缩放 setCacheMode 设置缓冲的模式
		 * setDefaultFontSize 设置默认的字体大小 setDefaultTextEncodingName 设置在解码时使用的默认编码
		 * setFixedFontFamily 设置固定使用的字体 setJavaSciptEnabled 设置是否支持Javascript
		 * setLayoutAlgorithm 设置布局方式 setLightTouchEnabled 设置用鼠标激活被选项
		 * setSupportZoom 设置是否支持变焦
		 * */
		ws.setBuiltInZoomControls(true);// 隐藏缩放按钮
		ws.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);// 排版适应屏幕
		ws.setUseWideViewPort(true);// 可任意比例缩放
		ws.setLoadWithOverviewMode(true);// setUseWideViewPort方法设置webview推荐使用的窗口。setLoadWithOverviewMode方法是设置webview加载的页面的模式。
		ws.setSavePassword(true);
		ws.setSaveFormData(true);// 保存表单数据
		ws.setJavaScriptEnabled(true);
		ws.setGeolocationEnabled(true);// 启用地理定位
		ws.setGeolocationDatabasePath("/data/data/org.itri.html5webview/databases/");// 设置定位的数据库路径
		ws.setDomStorageEnabled(true);
		ws.setBlockNetworkImage(true);// 显示网络图像
		xwebchromeclient = new xWebChromeClient();
		webView.setWebChromeClient(xwebchromeclient);
		webView.setWebViewClient(new xWebViewClientent());
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			if (inCustomView()) {
				hideCustomView();
				return true;
			} else {

				webView.loadUrl("about:blank");
				// mTestWebView.loadData("", "text/html; charset=UTF-8", null);
				XQActivity.this.finish();
				Log.i("testwebview", "===>>>2");
			}
		}
		return true;
	}

	/**
	 * 判断是否是全屏
	 * 
	 * @return
	 */
	public boolean inCustomView() {
		return (xCustomView != null);
	}

	/**
	 * 全屏时按返加键执行退出全屏方法
	 */
	public void hideCustomView() {
		xwebchromeclient.onHideCustomView();
	}

	/**
	 * 处理Javascript的对话框、网站图标、网站标题以及网页加载进度等
	 * 
	 * @author
	 */
	public class xWebChromeClient extends WebChromeClient {
		private Bitmap xdefaltvideo;
		private View xprogressvideo;

		@Override
		// 播放网络视频时全屏会被调用的方法
		public void onShowCustomView(View view,
				WebChromeClient.CustomViewCallback callback) {
			if (islandport) {

			} else {

				// ii = "1";
				// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
			}
			setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
			webView.setVisibility(View.GONE);
			// 如果一个视图已经存在,那么立刻终止并新建一个
			if (xCustomView != null) {
				callback.onCustomViewHidden();
				return;
			}
			
			videoview.addView(view);
			xCustomView = view;
			xCustomViewCallback = callback;
			videoview.setVisibility(View.VISIBLE);
		}

		@Override
		// 视频播放退出全屏会被调用的
		public void onHideCustomView() {

			if (xCustomView == null)// 不是全屏播放状态
				return;

			// Hide the custom view.
			setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
			xCustomView.setVisibility(View.GONE);

			// Remove the custom view from its container.
			videoview.removeView(xCustomView);
			xCustomView = null;
			videoview.setVisibility(View.GONE);
			xCustomViewCallback.onCustomViewHidden();

			webView.setVisibility(View.VISIBLE);

			// Log.i(LOGTAG, "set it to webVew");
		}

		// 视频加载添加默认图标
		@Override
		public Bitmap getDefaultVideoPoster() {
			// Log.i(LOGTAG, "here in on getDefaultVideoPoster");
			if (xdefaltvideo == null) {
				xdefaltvideo = BitmapFactory.decodeResource(getResources(),
						R.drawable.progressbar_bg);
			}
			return xdefaltvideo;
		}

		// 视频加载时进程loading
		@Override
		public View getVideoLoadingProgressView() {
			// Log.i(LOGTAG, "here in on getVideoLoadingPregressView");

			if (xprogressvideo == null) {
				LayoutInflater inflater = LayoutInflater.from(XQActivity.this);
				xprogressvideo = inflater.inflate(
						R.layout.video_loading_progress, null);
			}
			return xprogressvideo;
		}

		// 网页标题
		@Override
		public void onReceivedTitle(WebView view, String title) {
			(XQActivity.this).setTitle(title);
		}

		// @Override
		// //当WebView进度改变时更新窗口进度
		// public void onProgressChanged(WebView view, int newProgress) {
		// (MainActivity.this).getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
		// newProgress*100);
		// }

	}

	/**
	 * 处理各种通知、请求等事件
	 * 
	 * @author
	 */
	public class xWebViewClientent extends WebViewClient {

		@Override
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
			Log.i("webviewtest", "shouldOverrideUrlLoading: " + url);
			return false;
		}
	}

	/**
	 * 当横竖屏切换时会调用该方法
	 * 
	 * @author
	 */
	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		Log.i("testwebview", "=====<<<  onConfigurationChanged  >>>=====");
		super.onConfigurationChanged(newConfig);

		if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
			Log.i("webview", "   现在是横屏1");
			islandport = false;
		} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
			Log.i("webview", "   现在是竖屏1");
			islandport = true;
		}
	}

这样WebView中的视频就可以在网页上 播放,并且可以实现全屏的效果,如果只是单独的可以播放,那么就没必要这么麻烦了,只是改变一点属性就OK了:
 
<pre name="code" class="java">public class MainActivity extends Activity {

	private WebView webView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 取消标题
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		// 进行全屏

		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		setContentView(R.layout.activity_main);

		// 实例化WebView
		webView = (WebView) this.findViewById(R.id.webView);

		WebSettings settings = webView.getSettings();
		settings.setUseWideViewPort(true);
		settings.setLoadWithOverviewMode(true);
		settings.setJavaScriptEnabled(true);
		settings.setDatabaseEnabled(true);
		
		webView.loadUrl("http://hkwxy.daxiangqun.net/index.php/Learn/info1/id/53");
		webView.setWebChromeClient(new WebChromeClient());
		webView.setWebViewClient(new WebViewClient() {
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				view.loadUrl(url);
				return true;
			}
		});
	}

	@Override
	protected void onDestroy() {
		webView.destroy();
		super.onDestroy();
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		webView.pauseTimers();
		super.onPause();
	}

	@Override
	public void onResume() {
		webView.resumeTimers();
		super.onResume();
	}

}



 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值