WebView

来源:互联网 发布:js 过滤表情符号 编辑:程序博客网 时间:2024/06/05 05:40

使用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{@Overridepublic 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());}@Overridepublic 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");}// 视频加载添加默认图标@Overridepublic Bitmap getDefaultVideoPoster() {// Log.i(LOGTAG, "here in on getDefaultVideoPoster");if (xdefaltvideo == null) {xdefaltvideo = BitmapFactory.decodeResource(getResources(),R.drawable.progressbar_bg);}return xdefaltvideo;}// 视频加载时进程loading@Overridepublic 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;}// 网页标题@Overridepublic 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 {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {Log.i("webviewtest", "shouldOverrideUrlLoading: " + url);return false;}}/** * 当横竖屏切换时会调用该方法 *  * @author */@Overridepublic 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;@Overrideprotected 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);// 实例化WebViewwebView = (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;}});}@Overrideprotected void onDestroy() {webView.destroy();super.onDestroy();}@Overrideprotected void onPause() {// TODO Auto-generated method stubwebView.pauseTimers();super.onPause();}@Overridepublic void onResume() {webView.resumeTimers();super.onResume();}}





0 0
原创粉丝点击