2010-04-28 9 views
7

Mam aplikację na Androida, która jest TabHost z WebView. Używam go do załadowania określonego pliku html, który ma pole tekstowe w jego dolnej części.Pole tekstowe html w WebView w aplikacji Android jest ukryte za pomocą miękkiej klawiatury

Po dotknięciu pola tekstowego HTML miękka klawiatura wyskakuje i ukrywa pole tekstowe, dzięki czemu nie widzę tego, co wpisałem.

Oto układ:

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/main" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
     <TabWidget 
      android:focusableInTouchMode="false" 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="63dp" /> 
     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 
     <LinearLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/layout" 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" > 
       <WebView 
        android:id="@+id/webview" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:layout_weight="1" /> 
      </LinearLayout> 
     </FrameLayout>  
    </LinearLayout> 
</TabHost> 

Próbowałem skonfigurować plik AndroidManifest.xml z android:windowSoftInputMode="adjustResize" bez powodzenia. Próbowałem również zastąpić FrameLayout w moim układzie za pomocą ScollView, ale to spowodowało, że mój webview zwiększał rozmiar w nieskończoność, gdy aplikacja jest uruchomiona. Może to być spowodowane niektórymi javascriptami, które uruchomiłem na stronie.

Zauważyłem, że przeglądarka internetowa Androida ma fajne zachowanie - na stronie internetowej, po wyświetleniu miękkiej klawiatury, strona internetowa przewija się płynnie, dzięki czemu pole tekstowe z możliwością ustawiania ostrości jest widoczne dla użytkownika. Jak mogę zachować takie zachowanie w mojej aplikacji?

+0

Sposób obejścia tego problemu może zostać zgłoszony, gdy pojawi się softkey, a następnie ręcznie zmienić rozmiar widoku. Próbowałem wdrażanie onCreateInputConnection (EditorInfo) we wszystkich moich klasach układu, ale nie można uzyskać powiadomienia, gdy pojawi się klawiatura. Pomoc! – gardenofwine

Odpowiedz

4

Znalazłem rozwiązanie dla tego problemu. (około tygodnia po tym, jak napisałem pytanie, tylko odpowiadam dzisiaj na stackoverflow ...)

Miałem fragmenty kodu, które zmieniły wysokość WebView (aby mieć miejsce na TabBar). Okazuje się, że po wywołaniu setLayoutParams w WebView, nie zmieni ona już swojej wysokości, nawet jeśli masz zestaw android:windowSoftInputMode="adjustResize".

ominąłem potrzebę zmiany wysokości WebView, dodając TabBar do pliku układu main.xml o początkowym rozmiarze 0. Kiedy zwiększam rozmiar TabBar, rozmiar WebView zmniejsza się automatycznie i zachowuje android:windowSoftInputMode="adjustResize" zachowanie.

+0

Czy wiesz, czy jest to znany błąd w WebView? Właśnie natknąłem się na ten sam problem –

+0

Nie zgłosiłem usterki dla tego problemu z powrotem w ciągu dnia. W tamtym czasie wersja Androida API, nad którą pracowałem, miała 1.6 lub 2.2 (nie pamiętam). – gardenofwine

+0

Miałem bardziej złożony układ, więc naprawa była trudniejsza, ale w końcu zrobiłem to samo, co robiłeś i obchodzono call setLayoutParams ze stałą wysokością dla webView –

7

Szalałem, że nic nie pomoże android:windowSoftInputMode="adjustResize" może pomóc, ale upewnij się, że aplikacja nie działa na pełnym ekranie.

Usunięcie pełnego ekranu dla mojej aplikacji rozwiązało problem z rozmiarem układu z klawiaturą programową.

<item name="android:windowFullscreen">false</item> 
+1

Zauważ, że 'adjustResize' nie zadziała, jeśli' windowFullscreen' zostanie ustawiony na 'true'. –

+1

Jestem prawie pewien, że tak właśnie powiedział. –

Powiązane problemy