android中webView的设置
来源:互联网 发布:微信预约排号系统源码 编辑:程序博客网 时间:2024/06/03 17:26
在开发过程中,发现webView在使用时需要设置较多的参数,进行总结如下.
webView的官方API是:http://www.android-doc.com/reference/android/webkit/WebView.html
webView的继承关系如下:
webView采用WebKit渲染引擎来显示网页,能够先前和向后导航,能够放大和缩小,能够进行文本搜索等。WebKit是一个开源的浏览器引擎。Safari、Chrome都是基于WebKit的。
为了让程序能够连接网络,在webView中loadURL,需要再AndroidManifest.xml中添加INTERNET权限。
<uses-permission android:name="android.permission.INTERNET" />在默认情况下,webView没有提供类似于浏览器的窗口小部件,不支持JavaScript,而且忽略网页错误。如果你的目标只是显示一些HTML作为UI的一部分,用于不需要与web进行交互,那么webView可行。如果你需要一个完全成熟的web浏览器,那么就需要用调用一个应用程序,而不是用webView进行显示。
Uri uri = Uri.parse("http://www.example.com"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);1. webView加载网页的方法:
// 加载网页,但是不会抛出异常 webview.loadUrl("http://slashdot.org/"); // 加载HTML字符串 String summary = "<html><body>You scored <b>192</b> points.</body></html>"; webview.loadData(summary, "text/html", null); // 加载本地文件,格式固定的,文件位置 webView.loadUrl(file:///android_assets/XXX.html);
2. 使用webView时,有几个地方需要set自己的方法:
1)创建和设置WebChromeClient类。当会影响到用户所看得到的UI界面时将会被调用,例如进度更新或者JS的告警等。
2)创建和设置WebViewClient类,当影响了内容的呈现、渲染时会被调用,例如错误等。还可以截取URL转载在这里(通过shouldOverrideUrlLoading()方法)。
3)修改WebSettings,例如通过setJavaScriptEnable()启动JavaScript。在设置为true后,webView能够加载JS
4)通过addJavascriptInterface(Object, String)方法为webView绑定一个Java对象,这个方法为JavaScript绑定了一个Java对象,可以通过这个对象访问JS。
下面这个例子呈现了如何进行错误处理、设置和进度更新。
// Let's display the progress in the activity title bar, like the // browser app does. getWindow().requestFeature(Window.FEATURE_PROGRESS); webview.getSettings().setJavaScriptEnabled(true); final Activity activity = this; webview.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { // Activities and WebViews measure progress with different scales. // The progress meter will automatically disappear when we reach 100% activity.setProgress(progress * 1000); } }); webview.setWebViewClient(new WebViewClient() { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); } }); webview.loadUrl("http://developer.android.com/");
3. WebChromeClient
WebChromeClient直接继承自Object类,主机通知当前界面改变的回调接口。主要辅助webView处理JavaScript的对话框、网站图标、网站title、加载进度条等。
例如:
onCloseWindow() 关闭webView
onCreatWindow()
onJsAlert() webView上alert无效,需要定制WebChromeClient处理
onJsPrompt()
onJsConfirm()
onProgressChanged()
onReceivedIcon()
onReceivedTitle()
4. WebViewClient
webViewClient用于辅助webVIew处理各种停止、请求事件,主要包括:
onLoadResource()
onPageStart()
onPageFinish()
onReceiveError()
onReceivedHttpAuthRequest()
5. 与JS交互
Activity的代码:
public class MainActivity extends Activity {private WebView webView;private Context context;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);context = this;webView = (WebView) findViewById(R.id.wv);// 不使用缓存webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);// 支持JavaScriptwebView.getSettings().setJavaScriptEnabled(true);webView.setWebChromeClient(new WebChromeClient());webView.setWebViewClient(new WebViewClient());// JS回调AndroidwebView.addJavascriptInterface(new JSCallBack(), "JSCallBack");webView.loadUrl("http://haojiazhang123.com/share/shop/education_market.html");}// JS回调Androidpublic class JSCallBack {@JavascriptInterfacepublic void jsCallBack(String orderInfo) {// orderInfo是JS传入的参数Toast.makeText(context, "JS调用Android", Toast.LENGTH_SHORT).show();}}// Android回调JSprivate void callJSPayResult(String payResult) {webView.loadUrl("javascript:alipayCallBack('" + payResult + "')");}}xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:id="@+id/wv" android:layout_width="match_parent" android:layout_height="match_parent"/></RelativeLayout>AndroidManifest.xml要加上访问网络的权限
<uses-permission android:name="android.permission.INTERNET" />
6. webView的其他常用设置
private void init() {WebSettings settings = webView.getSettings();settings.setJavaScriptEnabled(true);// 自适应屏幕settings.setUseWideViewPort(true);settings.setLoadWithOverviewMode(true);// 不支持缩放(如果要支持缩放,html页面本身也要支持缩放:不能加user-scalable=no)settings.setBuiltInZoomControls(false);settings.setSupportZoom(false);settings.setDisplayZoomControls(false);// 隐藏scrollbarsetVerticalScrollBarEnabled(false);setHorizontalScrollBarEnabled(false);// 支持通过js打开新的窗口settings.setJavaScriptCanOpenWindowsAutomatically(true);}/** * 禁用网页上的点击事件 */public void setNoClick() {setClickable(false);setLongClickable(false);setFocusable(false);setFocusableInTouchMode(false);setVerticalScrollBarEnabled(false);setHorizontalScrollBarEnabled(false);}
- android中webView的设置
- 在Android的WebView中给一级域名设置cookie
- Android WebView中Cookie的获取和设置
- android的webView设置代理
- android webview字体大小的设置
- android webview字体大小的设置
- Android的webview缩放设置
- android webview字体大小的设置
- Android WebView的一些设置
- Android 在webview中设置代理
- android中WebView加载网页设置进度条
- Android中WebView设置自适应屏幕
- android中给WebView设置Cookie
- 在Android WebView中设置Cookie
- android中WebView加载网页设置进度条
- android中WebView加载网页设置进度条
- android中WebView加载网页设置进度条
- android中WebView加载网页设置进度条
- memcache spring cache 关键点
- 栈和队列之生成窗口最大值数组
- 异常处理:Unable to instantiate Action, checkLoginAction, defined for 'checkUser' in namespace '/'Error
- KERNEL32.dll动态链接库报错解决方法
- 安卓开发
- android中webView的设置
- Chromium硬件加速渲染的UI合成过程分析
- Oracle的ERP实施方法论
- MySQL 忘记root密码
- 关于webview,一篇就够了
- 《挑战程序设计竞赛》2.1.1 深度优先搜索 POJ2386 POJ1979 AOJ0118 AOJ0033 POJ3009
- Android 6.0 APIs_新特性(google官方)
- iOS之tableview隐藏最下边多余的cell
- C语言结构体的定义和使用