问题:在一个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来切换不好(在效率上考虑),希望能找到更好的方法解决