Я борюсь с управлением фокусом в WebView: WebView смешивается с управлением фокусом классических компонентов. Вот простое приложение, содержащее только EditBox и WebView, которое загружает Google!
<?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 ();" во время инициализации все становится лучше. Я могу переключиться с моего EditText на мой WebView, если сначала нажму только на WebView ... Но поведение вскоре становится очень "ошибочным", когда WebView иногда не фокусируется при прикосновении к нему, иногда получает его, но остается с прямоугольником фокуса вокруг полей WebView (оранжевый или зеленый в зависимости от вашего телефона) после другого прикосновения, чтобы вернуться к компоненту EditText (в котором я могу писать текст)!
В любом случае, решение, которое я нашел, это добавить 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, но это ничего не делает:
См. Результат
Есть идеи, как это решить?
Большое спасибо за вашу помощь!