webview进度条设置之WebChromeClient常用API与功能使用详解
来源:互联网 发布:寻仙网络错误连接失败 编辑:程序博客网 时间:2024/06/11 03:52
转载自原文地址
0. 写在前面
在使用这个WebChromeClient设置进入条有一点要注意,因为这进度加载不止一种样式,我们设置progress时,这个控件默认的style是那种转圈的,不仔细看可能看不清,以为没设置上,所以我们一般可以改变这个控件的样式,一般都是这种最经典的,就是经度条,代码就是在progress中加一条style属性。就这点要注意。
style="?android:attr/progressBarStyleHorizontal"
在WebView的开发过程中当你需要使用到一些高级功能可以通过设置WebChromeClient从而来辅助WebView处理 JavaScript 的对话框、网站图标、网站title、加载进度等。
WebChromeClient常用的API方法
1.通知应用程序当前网页加载的进度
12
public void onProgressChanged(WebView view, int newProgress)
2.获取网页title标题
12
public void onReceivedTitle(WebView view, String title)
获取标题的时间主要取决于网页前段设置标题的位置,一般设置在页面加载前面,可以较早调用到这个函数
3.网页中有H5播放flash video的时候按下全屏按钮将会调用到这个方法,一般用作设置网页播放全屏操作
12
public void onShowCustomView(View view, CustomViewCallback callback)
对应的取消全屏方法
12
public void onHideCustomView()
WebView下载监听
通过设置webview下载监听进而监听网页下载
12345
mWebView.setDownloadListener(new DownloadListener() { public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { }});
一般可在downloadStart 处进行下载处理
WebChromeClient高级功能实现
1.让你的webview支持File Input 标签
在Android 5.0 API 21后 借助新的 onShowFileChooser() 方法,您现在不但可以在 WebView 中使用输入表单字段,而且可以启动文件选择器从 Android 设备中选择图片和文件
12345678910111213141516171819202122232425262728293031323334353637383940414243444546
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { if (mFilePathCallback != null) { mFilePathCallback.onReceiveValue(null); } mFilePathCallback = filePathCallback; Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { // Create the File where the photo should go File photoFile = null; try { photoFile = createImageFile(); takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath); } catch (IOException ex) { // Error occurred while creating the File Log.e(TAG, "Unable to create Image File", ex); } // Continue only if the File was successfully created if (photoFile != null) { mCameraPhotoPath = "file:" + photoFile.getAbsolutePath(); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); } else { takePictureIntent = null; } } Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT); contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE); contentSelectionIntent.setType("image/*"); Intent[] intentArray; if (takePictureIntent != null) { intentArray = new Intent[]{takePictureIntent}; } else { intentArray = new Intent[0]; } Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER); chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent); chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser"); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE); return true;}
在选择完图片后回调onActivityResult 获取图片
12345678910111213141516171819202122232425262728
public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode != INPUT_FILE_REQUEST_CODE || mFilePathCallback == null) { super.onActivityResult(requestCode, resultCode, data); return; } Uri[] results = null; // Check that the response is a good one if (resultCode == Activity.RESULT_OK) { if (data == null) { // If there is not data, then we may have taken a photo if (mCameraPhotoPath != null) { results = new Uri[]{Uri.parse(mCameraPhotoPath)}; } } else { String dataString = data.getDataString(); if (dataString != null) { results = new Uri[]{Uri.parse(dataString)}; } } } mFilePathCallback.onReceiveValue(results); mFilePathCallback = null; return;}
2.支持全屏视频播放
设置webview视频未播放时默认显示占位图
123456789
public Bitmap getDefaultVideoPoster() { if(getActivity() == null) { return null; } return BitmapFactory.decodeResource(getActivity().getApplicationContext().getResources(), R.drawable.video_poster);}
视频播放全屏时调用
12345678910111213141516171819202122232425262728293031323334
public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) { // if a view already exists then immediately terminate the new one if (mCustomView != null) { onHideCustomView(); return; } // 1. Stash the current state mCustomView = view; mOriginalSystemUiVisibility = getActivity().getWindow().getDecorView().getSystemUiVisibility(); mOriginalOrientation = getActivity().getRequestedOrientation(); // 2. Stash the custom view callback mCustomViewCallback = callback; // 3. Add the custom view to the view hierarchy FrameLayout decor = (FrameLayout) getActivity().getWindow().getDecorView(); decor.addView(mCustomView, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); // 4. Change the state of the window getActivity().getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE); getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);}
视频取消全屏时候调用
1234567891011121314151617
public void onHideCustomView() { // 1. Remove the custom view FrameLayout decor = (FrameLayout) getActivity().getWindow().getDecorView(); decor.removeView(mCustomView); mCustomView = null; // 2. Restore the state to it's original form getActivity().getWindow().getDecorView() .setSystemUiVisibility(mOriginalSystemUiVisibility); getActivity().setRequestedOrientation(mOriginalOrientation); // 3. Call the custom view callback mCustomViewCallback.onCustomViewHidden(); mCustomViewCallback = null;}
0 0
- webview进度条设置之WebChromeClient常用API与功能使用详解
- WebView设置之WebChromeClient
- WebView使用详解(三)——WebChromeClient与LoadData补充
- WebView使用详解(三)——WebChromeClient与LoadData补充
- WebView使用详解(三)——WebChromeClient与LoadData补充
- WebView使用详解(三)——WebChromeClient与LoadData补充
- WebChromeClient常用方法详解
- WebView使用解析(二)之WebViewClient/WebChromeClient
- Android WebView(二) WebView常用API详解
- WebView更改错误显示页面之WebChromeClient
- 使用WebView, WebChromeClient和WebViewClient加载网页
- 使用WebView, WebChromeClient和WebViewClient加载网页
- Android之WebView的使用例子——WebSetting、WebViewClient、WebChromeClient
- Android API翻译之WebChromeClient(未完工)
- zookeeper: 入门 - 3 - API常用函数功能与参数详解
- zookeeper API常用函数功能与参数详解
- WebView使用详解——WebViewClient与常用事件监听
- webiew 开发详解(二)--WebChromeClient API 和WebViewClient API
- 设计模式总结
- SQL AND & OR 运算符
- settings.xml详解
- Linux服务器域名绑定php网页
- RequireJS 学习笔记
- webview进度条设置之WebChromeClient常用API与功能使用详解
- 内存溢出内存泄漏区别
- caffe 介绍1
- #Vijos P1629#八
- linux Makefile = 号前带符号的作用解释
- textarea 显示换行
- Google Protocol Buffers 快速入门(带生成C#源码的方法)
- HoloLens Clicker配对及问题解决
- 几个常用的工具类-异步下载、handler下载工具类、图片缓存等