我正在与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(即谷歌搜索术语输入框)!但是在添加“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但是没有做任何事情:
知道如何解决这个问题吗? 非常感谢你的帮助!
答案 0 :(得分:7)
确保扩展“ViewGroup
”的父布局没有属性
android:descendantFocusability = "blocksDescendants"
阻止儿童布局集中注意力
答案 1 :(得分:5)
这有助于我解决问题:
Webview.requestFocus(View.FOCUS_DOWN|View.FOCUS_UP);
这是敏感的触摸:
Webview.getSettings().setLightTouchEnabled(true);
答案 2 :(得分:2)
只需将 android:focusable =“true”添加到您的WebView布局中:
<WebView android:id="@+id/uiContent"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusable="true"/>