WebView相关
2016-01-27 09:17
309 查看
WebView相关
WebView的后退
方式一@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { if (mWebView.canGoBack()) { mWebView.goBack(); } else { finish(); } return true; } return super.onKeyDown(keyCode, event); }
方式二
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); return true; } return super.onKeyDown(keyCode, event); }
使用intent跳转到指定网页
Uri uri = Uri.parse("http://www.sohu.com"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);
webview浏览器url输入栏
btn_search.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String url = et_text.getText().toString(); if (url == null || "".equals(url)) { Toast.makeText(getApplicationContext(), "请输入", Toast.LENGTH_SHORT).show(); } else { if (!url.startsWith("http:") && !url.endsWith("file:")) { url = "http://" + url; } } webview.loadUrl(url); } });
WebSettings设置
settings = mWebView.getSettings(); settings.setJavaScriptEnabled(true); // 启用javascript脚本 settings.setBuiltInZoomControls(true); // 启用界面上放大和缩小按钮 settings.setUseWideViewPort(true); // 启用双击放大, 双击缩小功能 mWebView.loadUrl(url); webSettings.setCacheMode(webSettings.LOAD_CACHE_ELSE_NETWORK);// 优先使用缓存 webSettings.setCacheMode(webSettings.LOAD_NO_CACHE);//不使用缓存 webview.setHapticFeedbackEnabled(false); // 触觉回馈不可用 mWebSettings.setSupportZoom(true); // 支持缩放 webview.getSettings().setSavePassword(false); // 设置是否保存密码
webview加载资源
// webview加载本地资源 webview.loadUrl("file:///android_asset/demo.html"); // 加载web资源 webview.loadUrl("http://baidu.com"); // 这种方式可以解决中文乱码问题 String htmlContent="<html><head></head><body>少量内容,直接用字符串拼接</body></html>"; webview.loadDataWithBaseURL(null, htmlContent, "text/html", "utf-8", null);
WebViewClient
使用webview打开网页webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); // 返回true用WebView打开,false调用系统浏览器或第三方浏览器 return true; } });
加载网页完成后,进度条消失
mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { mProgressbar.setVisibility(View.GONE); } });
总结
class MyWebViewClient extends WebViewClient { //设置使用webview打开网页 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } // 开始加载网页时要做的工作 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } // 加载完成时要做的工作 @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } // 加载错误时要做的工作 @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Log.d("onReceivedError", "error=" + description); Toast.makeText(MainActivity.this, errorCode + "/" + description, Toast.LENGTH_LONG).show(); } }
WebChromeClient
class MyWebChromeClient extends WebChromeClient { // 对话框 @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { Builder builder = new Builder(MainActivity.this); builder.setTitle("提示对话框"); builder.setMessage("message"); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(); } }); builder.setCancelable(false); builder.create(); builder.show(); return true; } // 带按钮的对话框 @Override public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { Builder builder = new Builder(MainActivity.this); builder.setTitle("带选择的对话框"); builder.setMessage(message); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(); } }); builder.setNeutralButton(android.R.string.cancel, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); builder.setCancelable(false); builder.create(); builder.show(); return true; } // 带输入框的对话框 @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) { LayoutInflater inflater = LayoutInflater.from(MainActivity.this); final View v = inflater.inflate(R.layout.prom_dialog, null); // 设置 TextView对应网页中的提示信息 TextView TextView_PROM = (TextView) v.findViewById(R.id.TextView_PROM); TextView_PROM.setText(message); // 设置EditText对应网页中的输入框 EditText EditText_PROM = (EditText) v.findViewById(R.id.EditText_PROM); EditText_PROM.setText(defaultValue); Builder builder = new Builder(MainActivity.this); builder.setTitle("带输入的对话框"); builder.setView(v); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { 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) { result.cancel(); } }); builder.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { result.cancel(); } }); builder.create(); builder.show(); return true; } // 设置网页加载的进度条 @Override public void onProgressChanged(WebView view, int newProgress) { MainActivity.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress * 100); super.onProgressChanged(view, newProgress); } // 设置应用程序的标题 @Override public void onReceivedTitle(WebView view, String title) { MainActivity.this.setTitle(title); super.onReceivedTitle(view, title); } }
相关文章推荐
- android 密码输入通过复选框实现明文密文显示
- Android Studio Git插件_标签
- IOS app crash: 如何定位Crash 堆栈
- iOS常需要实现的功能示例
- Expandable Table的Demo
- Android调用系统内部功能错误
- android 参数 加密,解密 参数提交,数据返回
- Android屏幕适配全攻略(最权威的官方适配指导)
- 《Android源码设计模式解析与实战》读书笔记(二十六)
- Swift版使用ThPullRefresh实现下拉上拉刷新数据
- 超全!整理常用的iOS第三方资源
- iOS证书申请和使用说明
- blogApp编写之slf4j日志记录数据库读写耗时
- 夺命雷公狗---微信开发09----玩转单图文消息回复
- 夺命雷公狗---微信开发08----发送歌名,在线听取MP3
- 夺命雷公狗---微信开发07----接收地理位置消息,并用文本方式返回
- 夺命雷公狗---微信开发06----接收并被动回复语音消息
- 夺命雷公狗---微信开发05----根据用户输入返回指定图片,且图片入库
- Android studio java.lang.UnsatisfiedLinkError
- iOS之地理位置及定位系统 -- 入门笔记(用Swift)