使用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();
}
}