Проблема с Android WebView

Я борюсь с управлением фокусом WebView: WebView messes с управлением фокусом классических компонентов. Вот простое приложение с помощью 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 search)! Однако при добавлении «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, но это ничего не делает:

См. Результат

Есть идеи, как это решить? Большое спасибо за вашу помощь!

Solutions Collecting From Web of "Проблема с Android WebView"

Просто добавьте 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"/> 

Убедитесь, что родительский макет, который расширяет « ViewGroup », не имеет свойства

android:descendantFocusability = "blocksDescendants" которые мешают дочернему макету получать фокус

Это помогло моей проблеме:

Webview.requestFocus(View.FOCUS_DOWN|View.FOCUS_UP);

И это для чувствительного касания:

Webview.getSettings().setLightTouchEnabled(true);