我正在解决WebView的焦点管理问题:WebView干扰了经典组件的焦点管理。这里有一个简单的应用程序,只有一个EditBox和一个加载Google的WebView!
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:and="http://schemas.android.com/apk/res/android"
xmlns:webtag="http://schemas.android.com/apk/res/com.webtag"
and:orientation="vertical" and:layout_width="fill_parent" and:layout_height="fill_parent">
<LinearLayout and:id="@+id/HorizontalScrollView02"
and:layout_width="fill_parent" and:layout_height="wrap_content">
<EditText and:id="@+id/EditText01"
and:layout_width="wrap_content" and:layout_height="wrap_content"
and:text="@+id/EditText01"/>
</LinearLayout>
<WebView and:id="@+id/uiContent"
and:layout_weight="1"
and:layout_width="fill_parent"
and:layout_height="fill_parent"/>
</LinearLayout>
这里是Java代码:
public class WebtagActivity extends Activity
{
// UI components.
private WebView mContent;
private EditText mUrl;
@Override
public void onCreate (Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mContent = (WebView) findViewById(R.id.uiContent);
mContent.getSettings().setJavaScriptEnabled(true);
mContent.loadUrl("http://www.google.fr/");
}
}
基于这个非常简单的例子,不可能在WebView上获得焦点(即Google搜索术语输入框)!但是,在初始化期间添加“mContent.requestFocus();”之后,情况会变得更好。如果我先点击WebView,我就可以从我的EditText切换到我的WebView...但是行为很快变得非常“不稳定”,有时在触摸它时WebView无法获得焦点,有时在另一个触摸返回EditText组件(其中我可以编写文本)之后,仍然保持对WebView字段周围的焦点矩形(橙色或绿色,具体取决于您的手机)!
无论如何,我找到的一个解决方案是添加一个touchListener,并在单击WebView时请求焦点:
mContent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
}
return false;
}
});
这解决了几乎所有问题(从经典组件切换到 WebView 和编写文本),除了一个问题:WebView 在字段周围保留了 focusRectangle(绿色或橙色),无论它是否具有焦点。在下面的截图中,我的 EditText 具有焦点并接收文本,但 WebView 仍然看起来具有焦点。我尝试使用 clearFocus,但没有任何作用:
有什么解决办法吗? 非常感谢您的帮助!