欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程实现webview执行loadUrl时隐藏键盘的workround效果

程序员文章站 2023-11-28 21:53:22
本文实例讲述了android编程实现webview执行loadurl时隐藏键盘的workround效果。分享给大家供大家参考,具体如下: webview执行loadurl...

本文实例讲述了android编程实现webview执行loadurl时隐藏键盘的workround效果。分享给大家供大家参考,具体如下:

webview执行loadurl时隐藏键盘的workround

在写webapp的时候,经常需要用js调用java方法,java方法执行完毕以后,再回调js函数来做一些事情,而webview调用js的时候是通过loadurl方法的,一执行loadurl就会隐藏软键盘。因为每次loadurl操作都会调用clearhelpers方法 clearhelpers方法中又会调用cleartextentry方法,这个方法中会hidesoftkeyboard,那么有没有什么办法不隐藏呢。

有两种办法:

1)重写loadurl方法,在调用super.loadurl之前,记下softkeyboard的大小,在执行完super.loadurl之后把softkeyboard显示出来(想想都疯了。。。不用这种方法)

2)换个角度考虑,一般调用java方法的时候会打断输入(因为隐藏了键盘),说明在这一段时间应该是较为频繁的调用java方法,所以这种情况应该是较少时候出现的,那么可以给webview一个javascriptinterface, 将想要传递给js的参数在这个javascriptinterface提供给javascirpt代码调用。

代码如下:

定义一个类:

public class jsinterface {
  public string getstring(){
    return "2" ; //在这里返回参数,这里是最简单的情况。。
  }
}

在webview那边:

jsinterface = new jsinterface();
webview.addjavascriptinterface( jsinterface, "jsinterface" );

将这个javascriptinterface暴露给js

在html js文件这边:

setinterval(function() {
   counter++;
   var js = jsinterface.getstring();
   document.getelementbyid( "value").value = document.getelementbyid("value" ).value + js;
}, 1000);

每隔1秒通过java取一次数据,更新界面,这样就softkeyboard就不会隐藏了

上面的例子非常简单,可能大多数人觉得没什么用,实际上,在jsinterface.getstring方法中可以做很多事情的。

说到了asynctask, 需要知道刚开始所有asynctask都在一个线程中依次运行,在android1.6以后改成多线程运行,在android3.0以后,为了避免一些多线程的问题,又改成了单线程运行,如果先要asynctask多线程运行,需要自己建一个executor,使用asynctask.executeonexecutor方法运行。具体查看http://developer.android.com/reference/android/os/asynctask.html#executeonexecutor(java.util.concurrent.executor, params...)

希望本文所述对大家android程序设计有所帮助。