2010-04-28 10 views
7

Ho un'applicazione Android che è un TabHost con una WebView. Lo uso per caricare un file html specifico che ha un campo di testo nella parte inferiore.Il campo di testo HTML in WebView in un'applicazione Android è nascosto dalla tastiera software

Quando tocco il campo di testo html, la tastiera software si apre e nasconde il campo di testo, in modo che non riesca a vedere cosa ho digitato.

Ecco il layout:

<?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> 

Ho provato a configurare il file AndroidManifest.xml con android:windowSoftInputMode="adjustResize" senza successo. Ho anche provato a sostituire lo FrameLayout nel mio layout con ScollView, ma ciò ha causato il mio ingrandimento della dimensione webview indefinitamente quando l'applicazione è in esecuzione. Ciò potrebbe essere dovuto ad alcuni javascript in esecuzione sulla pagina.

Ho notato che il browser Web di Android ha un comportamento elegante: in una pagina Web, dopo l'apertura della tastiera software, la pagina Web scorre agevolmente in modo che il campo di testo focalizzabile sia visibile all'utente. Come posso avere questo tipo di comportamento nella mia applicazione?

+0

Un modo per ovviare a questo problema può essere notificato quando viene visualizzato il soft keybaord, quindi ridimensionare manualmente la visualizzazione Web. Ho provato a implementare onCreateInputConnection (EditorInfo) in tutte le mie classi di layout, ma non ho potuto ricevere una notifica quando appare la tastiera. Help! – gardenofwine

risposta

4

Ho trovato una soluzione per questo problema. (circa una settimana dopo aver postato la domanda, ho solo risposto a StackOverflow oggi ...)

Ho avuto pezzi nel mio codice che ha cambiato l'altezza del WebView (per avere spazio per un TabBar). Risulta che quando invochi setLayoutParams su una WebView, non cambierà più la sua altezza anche se hai impostato android:windowSoftInputMode="adjustResize".

Ho eluso la necessità di modificare l'altezza del WebView aggiungendo TabBar al file di layout main.xml, con una dimensione iniziale di 0. Quando si aumenta la dimensione del TabBar, le dimensioni del WebView diminuiscono automaticamente e mantiene lo android:windowSoftInputMode="adjustResize" comportamento.

+0

Sapere se si tratta di un bug noto di WebView? Sono appena incappato nello stesso problema –

+0

Non ho riscontrato un bug per questo problema nel corso della giornata. Allora la versione dell'API Android su cui stavo lavorando era 1.6, o 2.2 (non mi ricordo) – gardenofwine

+0

Ho avuto un layout più complesso, quindi una correzione era più difficile, ma alla fine ho fatto lo stesso di te e ho eluso chiama setLayoutParams con un'altezza fissa per la webView –

7

Mi stavo facendo impazzire niente funziona android:windowSoftInputMode="adjustResize" può aiutare ma essere sicuro di avere la vostra app non a schermo intero.

La rimozione dello schermo intero per la mia app ha risolto il problema con il ridimensionamento del layout con il softkey.

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

Si noti che 'adjustResize' non funzionerà se' windowFullscreen' è impostato su 'true' –

+1

Sono sicuro che sia quello che ha detto. –

Problemi correlati