2010-11-27 2 views
10

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

See the result

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

+0

увидеть мой ответ здесь: https://stackoverflow.com/questions/3981716/ cant-click-on-listview-which-rows-are-made-of-webviews/48652004 # 48652004 Просто используйте событие onTouch –

ответ

2

Просто добавьте андроида: фокусируемый = "истина" в макет WebView:

<WebView android:id="@+id/uiContent" 
    android:layout_weight="1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:focusable="true"/> 
+6

Спасибо, но это не работает для меня –

5

Это помогло моей проблеме для фокуса:

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

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

Webview.getSettings().setLightTouchEnabled(true);

+1

просто добавляет 'webView.requestFocus(); 'работал на меня. – Paul

+4

Спасибо, но это не работает для меня –

5

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

android:descendantFocusability = "blocksDescendants" которые предотвращают расположение ребенка от сосредоточены

+0

Я хочу сделать что-то противоположное, я не хотел фокусироваться на содержании, поэтому он работал для меня: P спасибо –

Смежные вопросы