- 浏览: 216127 次
文章分类
最新评论
-
lmjmn456:
为什么我的TestHall里面看不到RomeA RomeB R ...
Android 通过反射启动未安装的APK中的Activity -
wangleyiang:
uyerp 写道这样的话,只能将插件的元素显示到Hall中。有 ...
Android 通过反射启动未安装的APK中的Activity -
uyerp:
这样的话,只能将插件的元素显示到Hall中。有什么办法能在不安 ...
Android 通过反射启动未安装的APK中的Activity -
wangleyiang:
提高文学修养 写道不好意思,有时间尝试一下,谢谢!有问题提出来 ...
Android 主题之主题文件夹 -
提高文学修养:
不好意思,有时间尝试一下,谢谢!
Android 主题之主题文件夹
在Android的webview中定制js的alert,confirm和prompt对话框的方法
- 博客分类:
- Android
1.首先继承android.webkit.WebChromeClient实现MyWebChromeClient。
2.在MyWebChromeClient.java中覆盖onJsAlert,onJsConfirm ,onJsPrompt三个方法。
3.在初始化Webview时设置调用webview.setWebChromeClient(new MyWebChromeClient());
4.在Webview载入的html中使用window.alert,window.confirm,window.prompt方法,系统弹出的将是自定义实现的对应对话框。
MyWebChromeClient.java的代码如下:
import android.app.AlertDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnKeyListener; import android.graphics.Bitmap; import android.os.Message; import android.util.Log; import android.view.KeyEvent; import android.webkit.JsPromptResult; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.widget.EditText; public class MyWebChromeClient extends WebChromeClient { @Override public void onCloseWindow(WebView window) { super.onCloseWindow(window); } @Override public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) { return super.onCreateWindow(view, dialog, userGesture, resultMsg); } /** * 覆盖默认的window.alert展示界面,避免title里显示为“:来自file:////” */ @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { final AlertDialog.Builder builder = new AlertDialog.Builder(view .getContext()); builder.setTitle("lizongbo的Android webview测试alert对话 框").setMessage( message).setPositiveButton("确定", null); // 不需要绑定按键事件 // 屏蔽keycode等于84之类的按键 builder.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { Log.v("onJsAlert", "keyCode==" + keyCode + "event=" + event); return true; } }); // 禁止响应按back键的事件 builder.setCancelable(false); AlertDialog dialog = builder.create(); dialog.show(); result.confirm();// 因为没有绑定事件,需要强行confirm,否则页面会变黑显示不了内容。 return true; } @Override public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result) { return super.onJsBeforeUnload(view, url, message, result); } /** * 覆盖默认的window.confirm展示界面,避免title里显示为“:来自file:////” */ @Override public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { final AlertDialog.Builder builder = new AlertDialog.Builder(view .getContext()); builder.setTitle("Android webview测试confirm对话框").setMessage( message).setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(); } }).setNeutralButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); builder.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { result.cancel(); } }); // 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题 builder.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { Log.i("onJsConfirm", "keyCode==" + keyCode + "event=" + event); return true; } }); // 禁止响应按back键的事件 // builder.setCancelable(false); AlertDialog dialog = builder.create(); dialog.show(); return true; // return super.onJsConfirm(view, url, message, result); } /** * 覆盖默认的window.prompt展示界面,避免title里显示为“:来自file:////” * window.prompt('请输入您的域名地址', '618119.com'); */ @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) { final AlertDialog.Builder builder = new AlertDialog.Builder(view .getContext()); builder.setTitle("lizongbo的Android webview测试prompt对话框").setMessage( message); final EditText et = new EditText(view.getContext()); et.setSingleLine(); et.setText(defaultValue); builder.setView(et); builder.setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(et.getText().toString()); } }).setNeutralButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); // 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题 builder.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { Log.i("onJsPrompt", "keyCode==" + keyCode + "event=" + event); return true; } }); // 禁止响应按back键的事件 // builder.setCancelable(false); AlertDialog dialog = builder.create(); dialog.show(); return true; // return super.onJsPrompt(view, url, message, defaultValue, result); } @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); } @Override public void onReceivedIcon(WebView view, Bitmap icon) { super.onReceivedIcon(view, icon); } @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); } @Override public void onRequestFocus(WebView view) { super.onRequestFocus(view); } }
原文连接:http://618119.com/archives/2010/12/20/199.html
发表评论
-
避免OOM的一种方式
2014-03-11 09:30 810从网上看到一个避免OOM的方式,创建图片时,使用decod ... -
锁屏操作
2013-11-01 11:29 916从API Level 8开始,添加了一个新的类Device ... -
让Surface中绘制的内容响应用户的交互(状态变化)
2013-10-28 16:54 863被绘制的内容响应用户的交互,简单的看就是绘制内容的状态在用 ... -
在自定义的SurfaceView中绘制内容
2013-10-28 16:53 2821View和SurfaceView都可以用于绘制图形,但各有 ... -
在自定义的View中绘制内容
2013-10-28 10:52 918程序开发中,常常需要完成某一个特殊效果而绘制一些内容。 ... -
获取Bitmap大小
2013-10-08 17:59 945Bitmap的操作常常会导致OOM(内存溢出)。 在处理B ... -
隐藏键盘的一种处理方法
2013-10-08 15:18 633通过调用系统服务来隐藏键盘的一种处理方法: // 获 ... -
通过系统调用裁剪图片
2013-10-08 15:05 1016分享一个Android源码查看网页:http://andr ... -
拍照,相册获取图片,系统裁剪图片
2013-09-30 12:41 1559获取相册图片的一种写法: Intent intent = ... -
转-Android开发环境搭建篇详尽的教程实例汇
2013-09-27 13:50 728原文:http://wiki.eoe.cn/page/An ... -
一种更改包名的方式-Linux命令
2013-09-27 09:54 1109在Android应用程序中更改包名,可以从文件的角度来解决 ... -
Android 通过反射启动未安装的APK中的Activity
2013-02-05 16:32 8797JAVA反射机制是在运行状态中,对于任意一个类,都能够知道 ... -
Android 判断程序是否是系统程序
2013-02-04 14:12 1611获得Android手机中安装程序是否是系统程序,比较好的方式 ... -
Android R
2013-02-01 16:18 1201import java.lang.reflect.Fiel ... -
Android 主题之主题文件夹
2013-02-01 14:22 1640从文件夹中获得主题资源,然后在程序中做相关调整,下面看一个 ... -
Android 主题之安装的APK主题文件
2013-01-31 17:25 1792Android中应用主题设置 ... -
『转』Android Intent常见应用
2013-01-30 16:46 1334转自:http://blog.csdn.net/spy19 ... -
Android px sp dip转化
2013-01-30 12:53 942一个关于px, sp, dip转化的代码: public ... -
Android 布局
2013-01-30 11:19 1281对Android提供的基本布局控件进行组合,可以实现一些相 ... -
Android 添加动画的标签栏
2013-01-29 23:10 1083运行效果图: 实现原理:标签布局好了以后,标签所在V ...
相关推荐
android中WebView回调js的方法
Android Webview虽然提供了页面加载及资源请求的钩子,但是对于h5的ajax请求并没有提供干涉的接口,这意味着我们不能在webview中干涉javascript发起的http请求,而有时候我们确实需要能够截获ajax请求并实现一些功能...
Android webview 内存泄露的解决方法 最近在activity嵌套webview显示大量图文发现APP内存一直在涨,没法释放内存,查了很多资料,大概是webview的一个BUG,引用了activity导致内存泄漏,所以就尝试传递...
然后,开发者需要将 websocket.js 文件存放在 assets/www/js 目录下,并在 App.java 的 onCreate 方法中加入一些代码,以便将 WebSocketFactory 对象暴露给 JavaScript 环境。 在使用 Socket.IO 库时,开发者需要将...
Android WebView 去除标题 利用javacript交互
主要介绍了android webview中使用Java调用JavaScript方法并获取返回值,本文直接给出代码示例,需要的朋友可以参考下
android使用webView实现java程序与js脚本的相互调用,
android webview js交互, 响应webview中的图片点击事件 ,点击(双击)使图片变大,单击退出
Android WebView实现自由复制文字
Android Webview 滑动监听 放大缩小查看网页图片
A simpler, extendable bidirectional communication Frame between Android WebView and Javascript Features supports parsing and callback for JS primitive types Modular management support System WebView ...
Android webview与js交互
android不使用webview与js交互
android demo,webview_js(webview的js方法调用java方法)。
android webview input=file 失效解决方案
Android Webview upload 图片上传 ! 导读: Android HTML 打开相册上传照片 ...解决 android webview 在4.4系统上无法使用情况 博客地址 : http://blog.csdn.net/aaawqqq/article/details/51087805
android webview与js交互简单demo
android webview拨打电话 关注博客http://himici.com