webview 表单输入问题

来源:互联网 发布:软件需求文档ppt 编辑:程序博客网 时间:2024/06/07 05:17

问题:在一个Activity中建立多个WebView,默认情况下面只能有一个WebView可以正常输入。

 

主要代码:

在xml中简单建立了两个WebView:

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

    <WebView android:id="@+id/webView1" android:layout_width="match_parent" android:layout_height="400dip"></WebView>

    <WebView android:id="@+id/webView2" android:layout_width="match_parent" android:layout_height="400dip"></WebView>

</LinearLayout>

 

在onCreate中直接loadUrl,这里都load百度主页:

 

final WebView v1 = (WebView)findViewById(R.id.webView1);

        v1.loadUrl("http://www.baidu.com");

        v1.setOnFocusChangeListener(this);

        //v1.setOnTouchListener(this);

        //v1.requestFocusFromTouch();        

 

        final WebView v2 = (WebView)findViewById(R.id.webView2);

        v2.loadUrl("http://www.baidu.com");

        v2.setOnFocusChangeListener(this);

        //v2.setOnTouchListener(this);        

        //v2.requestFocusFromTouch();

 

验证了一下,发现:

 

1. 在没有requestFocus/requestFocusFromTouch的情况下面,第一个WebView可以正常输入,第二个没有反应(不会弹出虚拟键盘);

2. 设置了requestFocus/requestFocusFromTouch以后,最后设置的那个WebView是正常的;

 

其他控件不存在这个问题,不知道算不算的是WebView的一个bug?

 

尝试用setOnFocusChangeListener,打算在特定WebView获得Focus的时候调用requestFocus,但实际测试中发现这个办法行不通。原因:

1. 在没有requestFocus/requestFocusFromTouch的情况下面,点击第二个WebView的时候,该WebView根本得不到OnFocusChange的消息,而第一个WebView在点击输入框的时候,提示lose focus,在取消输入框的时候,提示gain focus和lose focus。。。。。很奇怪,好像WebView和页面内的内容的focus是分开的;

2. 设置了requestFocus/requestFocusFromTouch以后,就更奇怪了,本来以为是上面的情况直接颠倒过来,但实际情况是第一个WebView也能收到消息,但不全,还是用不上;

 

嗯,我现在使用setOnTouchListener来解决这个问题,就是在WebView的OnTouchDown的时候requestFocus,这样基本可以满足要求,但我发现一个bug,在一个WebView中输入,这个时候直接点击第二个WebView的输入,这个时候可以输入到第二个里面,但再点击第一个输入,还是输入到第二个。

 

现在还没有解决这个bug,而且总觉得用OnTouch来切换不好(在效率上考虑),希望能找到更好的方法解决

另外对于表单中处理多个输入框时, 使用webView.requestFocus();webView.requestFocus(View.FOCUS_DOWN);webView.requestFocusFromTouch(); 来进行设置,如果是一个webview 不同界面,只要 再启动表单时,重新设置webView.requestFocus();webView.requestFocus(View.FOCUS_DOWN);webView.requestFocusFromTouch();这些参数即可调用软键盘

原创粉丝点击