Android webview中的js如何监听键盘事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android webview中的js如何监听键盘事件相关的知识,希望对你有一定的参考价值。

写在android webview中的文本框如何通过类似keyup事件获取当前键盘点击键是不是删除。

首先,设置webView属性:

其次,设置WebChromeClient:

如此,webView中就可以捕获javascript的alert()、confirm()事件了。

参考技术A 重写Activity的dispatchKeyEvent(KeyEvent event)方法,在其中监听KeyEventKey.KEYCODE_ENTER键(右下角确定键),当此键按下的时候,隐藏输入法软键盘,设置edittext内容和加载webview内容。
重写dispatchKeyEvent(KeyEvent event)的方法感觉有点用牛刀的感觉,因为我们非常可能在这个方法中进行其他任务,所以我们可以使用OnKeyListener的方法来监听软键盘按键。
第三种方法我认为可以帮助程序员更精确的判断右下角按键情况,以便应对更加复杂的情况。它可以帮助程序员依据当前邮件下为“GO”,“done”,“search”键的情况下做出更细分的操作。
参考技术B webview
要调用js方法使用
先增加webview.addjavascriptinterface(object,
string);
然后在object里增加函数让js调用,在这个函数里再调用js的函数,如:
webview.loadurl("javascript:show()");
object可以这样
public
class
jsobject

@javascriptinterface
public
void
gocdetail(final
string
detailurl,
final
string
title)

post(new
runnable()

@override
public
void
run()

//
todo

);


@javascriptinterface这个标签要版本高一点才有,不加这个标签是调用不到的

android中通过kotlin使用WebView

  本文记录如何让网页中的JS代码和APP进行交互,简单的说就是如何在网页中执行APP的代码。下面以在网页中执行代码打开拨号键盘并输入电话号码为例介绍如何实现。
  一、设置WebView允许它执行js代码。
  二、通过调用WebView的addJavascriptInterface添加一个对象给js使用,添加完毕后在js里面相当于给window对象增加了一个子对象,比如addJavascriptInterface(obj,"app"),那么在js里面我们就可以直接使用app.来访问对象暴露给js的方法。
  三、不要忘记在清单文件里面给app添加拨打电话权限,<uses-permission android:name="android.permission.CALL_PHONE" />
  代码非常简单,就几行代码即可完成,注意不是完善的代码。
  APP端:

 1 class MainActivity : AppCompatActivity() {
 2     class JsObject(var ctx: Context) {  //暴露给js的类
 3         @JavascriptInterface  //要想让js访问该类的方法,在方法上加个这,我也不知道是啥玩意
 4         fun call(n:String)
 5         {
 6             var intent=Intent(Intent.ACTION_DIAL).setData(Uri.parse("tel:" + n));
 7             startActivity(ctx,intent,null);
 8         }
 9     }
10     override fun onCreate(savedInstanceState: Bundle?) {
11         super.onCreate(savedInstanceState)
12         var web:WebView= WebView(this)
13         setContentView(web)
14         web.webViewClient=WebViewClient()
15         web.settings.setJavaScriptEnabled(true);//设置WebView允许它执行js代码
16         web.loadUrl("file:///android_asset/a.html")   //这个地方使用了本地资源
17         web.addJavascriptInterface(JsObject(this),"app")//暴露给js一个对象app,
18     }
19 }

  因为是学习不到2天,很多东西都一知半解,顺便记录下如何把资源打包到APP里面,点击android studio 的file ->  new -> Folder -> Assets Folder 弹出对话框选择一个路径,默认即可,这时工程文件里就多了一个assets文件夹,我们把网页文件a.html拷贝到这个文件夹里面在工程里它就自动出现了,我们就可以使用这个文件了,这个文件的路径是file:///android_asset/+文件名。不知道有没有别的办法可以添加资源,也不知道assets文件名字能改不?
  a.html代码

<html>
<head>
    <title>测试网页</title>
</head>
<body>
hello
</body>
</html>
<script language="JavaScript">
    app.call("123456789");
</script>

以上是关于Android webview中的js如何监听键盘事件的主要内容,如果未能解决你的问题,请参考以下文章

Android 键盘事件触发以及监听

android中通过kotlin使用WebView

android webview 怎样监听HTML中的按钮并得到按钮的url

软键盘出现时如何保持Android webview中的固定页脚不覆盖输入字段?

Android中WebView中的文本字段被键盘隐藏

Android WebVIew中的键盘长键按下