Intereting Posts
Image background – как повторять изображение как фон, а не растягивать его Android: открыть файл с выбором намерения из URI, полученный с помощью платформы доступа к хранилищу Android скрывает мягкую клавиатуру IME Как я могу перенести прибор для тестирования базы данных на устройство из своего тестового приложения Функция, которая возвращает видимость Невозможно найти класс из java-библиотеки библиотеки, когда maven создаст мой проект Отображение маркера в geo: -url на Android-картах Ошибка: Исходный путь не существует: resources \ android \ icon \ drawable-hdpi-icon.png Снять apk с различным хранилищем ключей Настройки Daydream Как изменить ориентацию экрана GENYMOTION? Spinner не отображает выбранный элемент в android Каков «правильный» способ сделать это (если утверждение) Как вы прокомментируете правило в Proguard.cfg? Как поместить в качестве фона на InfoWindow (Google Maps API v2 для Android)?

Проблема с 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);