android WebView(五)WebChromeClient

WebView诸如获取页面的title、响应js中的alert、获取页面的加载进度等都可以通过设置WebChromeClient来实现。首先来看一下设置WebChromeClient的代码:webchromeclient = new SelfWebChromeClient( progressBar);webView.setWebChromeClient(webchromeclient);SelfWebChromeClient继承自WebChromeClient :class SelfWebChromeClient extends WebChromeClient {}WebView获取页面title需要继承并实现WebChromeClient的onReceivedTitle方法@Overridepublic void onReceivedTitle(WebView view, String title) {titleText.setText(title);}此方法返回了页面的title,你可以在此方法体内展示此title信息。WebView获取页面的加载进度

需要继承并实现WebChromeClient的onProgressChanged方法

@Overridepublic void onProgressChanged(WebView view, int newProgress) {// 当WebView进度改变时更新窗口进if (progressbar.getVisibility() != View.VISIBLE&&newProgress != 100) {progressbar.setVisibility(View.VISIBLE);}progressbar.setProgress(newProgress);super.onProgressChanged(view, newProgress);}

此方法返回了页面加载的进度newProgress。

WebView响应js中的alert加入你的html页面中调用了下面的js: alert("大家好");这时候需要如何来处理呢?WebChromeClient提供了回调方法onJsAlert,继承并实现此方法,在此方法体中做你想做的事,例如:@Overridepublic boolean onJsAlert(WebView view, String url, String message,final JsResult result) {// 构建一个Builder来显示网页中的alert对话框Builder builder = new Builder(TestWebActivity.this);builder.setTitle("alert对话框");builder.setMessage(message);builder.setPositiveButton(android.R.string.ok,new AlertDialog.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {result.confirm();}});builder.setCancelable(false);builder.create();builder.show();return true;}

还有诸如onJsConfirm之类的方法同理。

WebView播放视频WebView要想播放视频,需要注意几点:1、最好设置WebChromeClient。要不然很可能使你的视频框无法加载成功。2、在Menifest中设置:android:layerType="software"。要不然很可能使你的视频框无法加载成功。3、在Menifest中设置: <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />。这两个值一个要足够大,一个要足够小,要不然你的视屏可能只有声音没有影像,另外全屏时横竖屏切换也需要设置一个合适版本号。我给的是我试过能正常运行的参数,,其他的参数能不能行就不晓得了。4、最好基于Android3.2的sdk开发。WebView全屏播放需要如下实现WebChromeClient,当点击页面的全屏按钮时会触发onShowCustomView方法,在此方法中捕获视频组件放置到适当的地方去实现你的全屏播放:private View customView;class SelfWebChromeClient extends WebChromeClient {private Bitmap defaltvideo;private ProgressBar progressbar;private CustomViewCallback myCallback = null;public SelfWebChromeClient( ProgressBar progressbar) {super();this.progressbar = progressbar;}@Overridepublic void onShowCustomView(View view, CustomViewCallback callback) {if (myCallback != null) {myCallback.onCustomViewHidden();myCallback = null;return;}setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);ViewGroup parent = (ViewGroup) webView.getParent();parent.removeView(webView);parent.addView(view);webviewFrame.addView(webView);customView = view;myCallback = callback;}public void onHideCustomView() {if (customView != null) {if (myCallback != null) {myCallback.onCustomViewHidden();myCallback = null;}try {setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);ViewParent pat = customView.getParent();ViewGroup parent = (ViewGroup) pat;parent.removeView(customView);webviewFrame.removeAllViews();parent.addView(webView);customView = null;} catch (Exception e) {e.printStackTrace();}}}// 视频加载添加默认图标@Overridepublic Bitmap getDefaultVideoPoster() {System.out.println("getDefaultVideoPoster–>>");if (defaltvideo == null) {defaltvideo = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);}return defaltvideo;}// 视频加载时进程loading@Overridepublic View getVideoLoadingProgressView() {System.out.println("getVideoLoadingProgressView–>>");ProgressBar progressbar = new ProgressBar(TestWebActivity.this, null,android.R.attr.progressBarStyleHorizontal);progressbar.setLayoutParams(new AbsoluteLayout.LayoutParams(LayoutParams.FILL_PARENT, 3, 0, 0));return progressbar;}}回复小屏播放的代码如下:@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {if (customView != null) {webchromeclient.onHideCustomView();return true;} else {if (webView.canGoBack()) {webView.goBack();return true;} else {finish();}}}return false;}对于退出后还是有视屏播放的声音的问题,有的人说退出是执行:webView.loadUrl("about:blank")。但是我的测试效果不是很好,建议添加如下代码解决:@Overrideprotected void onResume() {// LogActs.i("onResume–>>");try {webView.getClass().getMethod("onResume").invoke(webView, (Object[]) null);} catch (Exception e) {e.printStackTrace();}super.onResume();}@Overrideprotected void onStop() {try {webView.getClass().getMethod("onPause").invoke(webView, (Object[]) null);} catch (Exception e) {e.printStackTrace();}// webView.loadUrl("about:blank");super.onStop();}

有本钱耍个性,离开睁眼闭眼看见的城市,逃离身边的纷纷扰扰,

android WebView(五)WebChromeClient

相关文章:

你感兴趣的文章:

标签云: