【发布时间】:2010-11-27 21:18:42
【问题描述】:
我正在与 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 有时在触摸它时没有获得焦点,有时会得到它但保持在 WebView 字段周围的焦点矩形(橙色或绿色取决于您的手机)再次触摸后返回 EditText 组件(我可以在其中编写文本)!
无论如何,我找到的一个解决方案是在单击 WebView 时添加一个 touchListener 并请求焦点:
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 保持焦点矩形(绿色或橙色)围绕字段,无论它是否具有焦点。在下面的屏幕截图中,我的 EditText 具有焦点并接收文本,但 WebView 看起来仍然具有焦点。我试过 clearFocus 但这没有任何作用:
知道如何解决这个问题吗? 非常感谢您的帮助!
【问题讨论】:
-
在这里查看我的答案:stackoverflow.com/questions/3981716/… 只需使用 onTouch 事件
标签: android focus android-widget webview