我正在努力解决 WebView 的焦点管理问题:WebView 与 Canonical Components 的焦点管理混在一起。 这是一个简单的应用程序,只有一个 EditBox 和一个加载 Google 的 WebView!
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();”时在初始化期间,情况变得更好。 如果我先单击 WebViewcss聚焦,我可以从 EditText 切换到 WebView...但是行为很快就会变得非常“不稳定”,WebView 有时在我触摸它时不会获得焦点,有时它会获得焦点但保持触摸状态再次点击 WebView 字段周围的焦点圆圈(橙色或红色,具体取决于您的手机)以返回到 EditText 组件(我可以在其中编写文本)!
不管怎样css聚焦,我找到的解决方案是添加一个 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,但它没有做任何事情:
查看结果
知道如何解决这个问题吗? 非常感谢您的帮助!