首页 android webview学习资料

android webview学习资料

举报
开通vip

android webview学习资料 工作中用到了 webview 下面把 webview 相关的知识进行一 下总结: 首先要在 manifest.main 文件中创建一个 webview,然后再 activity 中定义这个 webview 然后 进行一下相关操作。 1、添加权限:AndroidManifest.xml 中必须使用许可"android.permission.INTERNET",否则会出 Web page not available 错误。 2、在要 Activity 中生成一个 WebView 组件:WebView ...

android webview学习资料
工作中用到了 webview 下面把 webview 相关的知识进行一 下 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf : 首先要在 manifest.main 文件中创建一个 webview,然后再 activity 中定义这个 webview 然后 进行一下相关操作。 1、添加权限:AndroidManifest.xml 中必须使用许可"android.permission.INTERNET",否则会出 Web page not available 错误。 2、在要 Activity 中生成一个 WebView 组件:WebView webView = new WebView(this); 3、设置 WebView 基本信息: 如果访问的页面中有 Javascript,则 webview 必须设置支持 Javascript。 webview.getSettings().setJavaScriptEnabled(true); 触摸焦点起作用 requestFocus(); 取消滚动条 this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY); 4 如果希望点击链接由自己处理,而不是新开 Android 的系统 browser 中响应该链接。给 WebView 添 加 一 个 事 件 监 听 对 象 ( WebViewClient) 并 重 写 其 中 的 一 些 方 法 shouldOverrideUrlLoading:对网页中超链接按钮的响应。 当按下某个连接时 WebViewClient 会调用这个方法,并传递参数:按下的 url onLoadResource onPageStart onPageFinish onReceiveError onReceivedHttpAuthRequest 5、如果访问的页面中有 Javascript,则 webview 必须设置支持 Javascript ,否则显示空白页面。 Java 代码 webview.getSettings().setJavaScriptEnabled(true); 6、如果页面中链接,如果希望点击链接继续在当前 browser 中响应,而不是新开 Android 的系统 browser 中响应该链接,必须覆盖 webview 的 WebViewClient 对象: Java 代码 1. mWebView.setWebViewClient(new WebViewClient(){ 2. public boolean shouldOverrideUrlLoading(WebView view, String url) { 3. view.loadUrl(url); 4. return true; 5. } 6. }); 上述方法告诉系统由我这个 WebViewClient 处理这个 Intent,我来加载 URL。点击一个链接的 Intent 是向上 冒泡的,shouldOverrideUrlLoading 方法 return true 表示我加载后这个 Intent 就消费了,不再向上冒泡了。 7、如果不做任何处理,在显示你的 Brower UI 时,点击系统“Back”键,整个 Browser 会作为一个整体“Back" 到其他 Activity 中,而不是希望的在 Browser 的历史页面中 Back。如果希望实现在历史页面中 Back,需 要在当前 Activity 中处理并消费掉该 Back 事件: Java 代码 1. public boolean onKeyDown(int keyCode, KeyEvent event) { 2. if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 3. mWebView.goBack(); 4. return true; 5. } 6. return super.onKeyDown(keyCode, event); 7. } 对于 Android 2.0 开始又多出了一种新的方法,对于 Activity 可以单独获取 Back 键的按下事件,直接重 写 onBackPressed 方法即可,代码如下 Java 代码 @Override 1、public void onBackPressed() { 2、 // 这里处理逻辑代码,该方法仅适用于 2.0 或更高版本的 sdk 3、 return ; 4、} 这里还有几个 知识点 高中化学知识点免费下载体育概论知识点下载名人传知识点免费下载线性代数知识点汇总下载高中化学知识点免费下载 : 1)为了让 WebView 从 apk 文件中加载 assets,Android SDK 提供了一个 schema,前缀为 "file:///android_asset/"。WebView 遇到这样的 schema,就去当前包中的 assets 目录中找内 容。如上面的"file:///android_asset/demo.html" 2)addJavascriptInterface 方法中要绑定的 Java 对象及方法要运行另外的线程中,不能运行在 构造他的线程中,这也是使用 Handler 的目的。 Webview 的两种显示网页的方法: (1):webview.loadUrl(“www.baidu.com”); public class WebviewTest extends Activity { /** Called when the activity is first created. */ private WebView mWebView; private Button bt1; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mWebView = (WebView)findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); bt1 = (Button)findViewById(R.id.Button01); bt1.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { // TODO Auto-generated method stub webview.loadUrl(“www.baidu.com”); } }); } } (2):自定义网页:Webview.data(); public class WebviewTest extends Activity { /** Called when the activity is first created. */ private WebView mWebView; private Button bt1; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mWebView = (WebView)findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); bt1 = (Button)findViewById(R.id.Button01); bt1.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { // TODO Auto-generated method stub String str = "asdas"; mWebView.loadData( ""+str+"", "text/html", "utf-8"); } }); } } Webview 的常用方法实例: Manifest.xml 中的代码: 加入权限: 布局文件中的代码: TestWebviewDemo 中的代码: public class TestWebviewDemo extends Activity { /** Called when the activity is first created. */ private static final String TAG = "TestWebviewDemo"; private WebView mWebView; private Handler mHandler = new Handler(); private int mDensity; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mWebView = (WebView) findViewById(R.id.WebView01); mWebView.getSettings().setAllowFileAccess(true);// 设置允许访问文件数据 mWebView.getSettings().setBuiltInZoomControls(true);// 设置支持缩放 mWebView.getSettings().setSavePassword(false); // 设置是否保存密码 // 设置支持 JavaScript 脚本 mWebView.getSettings().setJavaScriptEnabled(true); // 设置支持各种不同的设备 mWebView .getSettings() .setUserAgentString( "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10"); // 通过这个设置来执行加载 webview 网页时所要执行的一些方法 mWebView.setWebViewClient(new WebViewClient() { // 新开页面时用自己定义的 webview 来显示,不用系统自带的浏览器来显示 public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub // 当有新连接时使用当前的 webview 进行显示 view.loadUrl(url); return super.shouldOverrideUrlLoading(view, url); } // 开始加载网页时要做的工作 public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } //加载完成时要做的工作 public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } // 加载错误时要做的工作 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Log.d(TAG, "error=" + description); Toast.makeText(TestWebviewDemo.this, errorCode + "/" + description, Toast.LENGTH_LONG) .show(); } }); // 处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话 框) mWebView.setWebChromeClient(new WebChromeClient() { // 对话框 public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { // 构建一个 Builder 来显示网页中的 alert 对话框 Builder builder = new Builder(TestWebviewDemo.this); builder.setTitle("提示对话框"); builder.setMessage(message); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub result.confirm(); } }); builder.setCancelable(false); builder.create(); builder.show(); return true; } // 带按钮的对话框 public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { Builder builder = new Builder(TestWebviewDemo.this); builder.setTitle("带选择的对话框"); builder.setMessage(message); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub result.confirm(); } }); builder.setNeutralButton(android.R.string.cancel, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub result.cancel(); } }); builder.setCancelable(false); builder.create(); builder.show(); return true; } // 带输入框的对话框 public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) { LayoutInflater inflater = LayoutInflater .from(TestWebviewDemo.this); final View v = inflater.inflate(R.layout.prom_dialog, null); // 设置 TextView 对应网页中的提示信息 ((TextView) v.findViewById(R.id.TextView_PROM)) .setText(message); // 设置 EditText 对应网页中的输入框 ((EditText) v.findViewById(R.id.EditText_PROM)) .setText(defaultValue); Builder builder = new Builder(TestWebviewDemo.this); builder.setTitle("带输入的对话框"); builder.setView(v); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub String value = ((EditText) v .findViewById(R.id.EditText_PROM)) .getText().toString(); result.confirm(value); } }); builder.setNegativeButton(android.R.string.cancel, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub result.cancel(); } }); builder .setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { // TODO Auto-generated method stub result.cancel(); } }); builder.create(); builder.show(); return true; } // 设置网页加载的进度条 public void onProgressChanged(WebView view, int newProgress) { TestWebviewDemo.this.getWindow().setFeatureInt( Window.FEATURE_PROGRESS, newProgress * 100); super.onProgressChanged(view, newProgress); } // 设置应用程序的标 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 public void onReceivedTitle(WebView view, String title) { TestWebviewDemo.this.setTitle(title); super.onReceivedTitle(view, title); } }); // 与网页进行交互的 addJavascriptInterface()的方法 mWebView.addJavascriptInterface(new Object() { public void clickOnAndroid(final String str) { mHandler.post(new Runnable() { @Override public void run() { // 逻辑代码 }); } }, "demo"); if (mDensity == 240) { // 可以让不同的 density 的情况下,可以让页面进行适配 mWebView.getSettings().setDefaultZoom(ZoomDensity.FAR); } else if (mDensity == 160) { mWebView.getSettings().setDefaultZoom(ZoomDensity.MEDIUM); } else { mWebView.getSettings().setDefaultZoom(ZoomDensity.CLOSE); } String strUrl = "http://10.0.2.2:8080/WebTest3"; mWebView.loadUrl(strUrl); } //处理返回的事件,(后退进入前一个界面而不是全部退出) @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) { mWebView.goBack();// 返回前一个页面 return true; } return super.onKeyDown(keyCode, event); } Webview 中 java 与网页进行数据交互: 先看我们的 html 文档: //js 调用 Java 方法

Click me!
Manifest.Xml 中: 加入权限: 再看我们的 java 代码。 Java 代码 public class WebViewDemo extends Activity { private static final String LOG_TAG = "WebViewDemo"; private WebView mWebView; private Handler mHandler = new Handler(); @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setSavePassword(false); webSettings.setSaveFormData(false); webSettings.setJavaScriptEnabled(true); webSettings.setSupportZoom(false); mWebView.setWebChromeClient(new MyWebChromeClient()); //自定义的 Demo,供 js 网页调用 mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo"); mWebView.loadUrl("file:///android_asset/demo.html"); } final class DemoJavaScriptInterface { DemoJavaScriptInterface() { } /** * This is not called on the UI thread. Post a runnable to invoke * loadUrl on the UI thread. */ public void clickOnAndroid() { //用 handler 来更新 UI mHandler.post(new Runnable() { public void run() { //Java 调用 js 方法 mWebView.loadUrl("javascript:wave()"); } }); } } /** * Provides a hook for calling "alert" from javascript. Useful for * debugging your javascript. */ final class MyWebChromeClient extends WebChromeClient { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { Log.d(LOG_TAG, message); result.confirm(); return true; } } } 再看个例子: Html 中的代码: 下面我们演示三种对话框





Manifest.Xml 中: 加入权限: Java 中的代码: public class Test extends Activity { /** Called when the activity is first created. */ private EditText et = null; private Button btn = null; private WebView wv = null; private WebSettings ws = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); et = (EditText) this.findViewById(R.id.EditText01); btn = (Button) this.findViewById(R.id.Button01); wv = (WebView) this.findViewById(R.id.WebView); ws = wv.getSettings(); ws.setAllowFileAccess(true);//设置允许访问文件数据 ws.setJavaScriptEnabled(true);//设置支持 javascript 脚本 ws.setBuiltInZoomControls(true);//设置支持缩放 wv.requestFocus(); wv.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view,String url){ //当有新连接时,使用当前的 WebView view.loadUrl(url); return true; } }); wv.setWebChromeClient(new WebChromeClient(){ public boolean onJsAlert(WebView view,String url,String message,final JsResult result){ //构建一个 Builder 来显示网页中的 alert 对话框 Builder builder = new Builder(Test.this); builder.setTitle("提示对话框"); builder.setMessage(message); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub result.confirm(); } }); builder.setCancelable(false); builder.create(); builder.show(); return true; } public boolean onJsConfirm(WebView view,String url,String message,final JsResult result){ Builder builder = new Builder(Test.this); builder.setTitle("带选择的对话框"); builder.setMessage(message); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub result.confirm(); } }); builder.setNeutralButton(android.R.string.cancel, new AlertDialog.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub result.cancel(); } }); builder.setCancelable(false); builder.create(); builder.show(); return true; } public boolean onJsPrompt(WebView view,String url,String message,String defaultValue,final JsPromptResult result){ LayoutInflater inflater = LayoutInflater.from(Test.this); final View v = inflater.inflate(R.layout.prom_dialog, null); //设置 TextView 对应网页中的提示信息 ((TextView)v.findViewById(R.id.TextView_PROM)).setText(message); //设置 EditText 对应网页中的输入框 ((EditText)v.findViewById(R.id.EditText_PROM)).setText(defaultValue); Builder builder = new Builder(Test.this); builder.setTitle("带输入的对话框 "); builder.setView(v); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub String value = ((EditText)v.findViewById(R.id.EditText_PROM)).getText().toString(); result.confirm(value);
本文档为【android webview学习资料】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_539220
暂无简介~
格式:pdf
大小:550KB
软件:PDF阅读器
页数:26
分类:互联网
上传时间:2011-08-29
浏览量:41