2013-08-19 16 views
6

Ho sviluppato un'applicazione Web per Firefox OS, ma volevo eseguirla in modo "nativo" su Android. La mia applicazione consiste in una finestra di dialogo che è una div che riempie l'intera pagina quando visibile, che ho testato utilizzando lo strumento di progettazione reattivo di Firefox e che ridimensiona correttamente. Quando appare una tastiera virtuale, vorrei che il dialogo si ridimensionasse sul viewport rimasto poiché ci sono alcuni pulsanti nella parte inferiore del dialogo.WebView non ridimensiona

Ho creato un'applicazione con una singola attività che contiene solo un WebView. Ho voluto la vista per ridimensionare quando appare la tastiera, quindi ho usato:

android:windowSoftInputMode="stateUnspecified|adjustResize" 

che non sembra fare alcuna differenza per la WebView quando la tastiera era visibile. Ho guardato online e c'erano molte persone che si lamentavano di questo problema, ma avevano tutti la stessa cosa in comune, stavano usando il tema Theme.Black.NoTitleBar.Fullscreen, che io non sono. Ho provato tutte le soluzioni a questo problema, ma nessuno di loro ha funzionato.

Ho quindi iniziato a chiedermi se ci fosse un bug in WebView che significava che non si ridimensionava. Quindi, ho scritto un'abitudine View che ha stampato le dimensioni in onLayout.

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    Log.d(TAG, t + " " + r + " " + b + " " + l); 
} 

E sicuramente, la visualizzazione veniva ridimensionata correttamente quando la tastiera appariva e spariva. Quindi, ho fatto qualche ricerca in più e ho trovato alcune risposte che dicevano che è necessario nascondere lo WebView, ricaricarlo e quindi mostrarlo di nuovo.

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    Log.d(TAG, t + " " + r + " " + b + " " + l); 

    mWebView.setVisibility(View.GONE); 
    mWebView.layout(l, t, r, b); 
    mWebView.invalidate(); 
    mWebView.reload(); 
    mWebView.setVisibility(View.VISIBLE); 
} 

Ancora, questo non ha risolto il mio problema. (E come punto laterale, questa è un'app web con un singolo file .html e JS fa cambiare lo stato di tutti gli elementi nell'app in runtime, quindi ricaricarlo non è un'opzione.)

My la domanda è se qualcuno conosce un modo per ridimensionare uno WebView una volta che il contenuto è stato caricato quando la tastiera è visibile.

+0

Non ho mai avuto questo problema prima. La mia webview e il suo contenuto, viene sempre ridimensionata correttamente. Con quale dispositivo stai provando? Inoltre, io uso "stateHidden | adjustResize" –

+0

Wow ... hai ragione! Ho creato una pagina html vuota con un div posizionato fisso 'fixed' e ridimensionato come previsto. Il problema era che dovevo usare 'position: absolute;' a causa di un bug in WebKit che fa sì che gli elementi 'fixed' non reagiscano a nessun' -webkit-transform', quindi dovrò trovare un altro modo. –

+0

Felice di aiutare.In generale ho trovato che usare WebView è troppo buggato (specialmente tra i dispositivi) e eviterò di utilizzarli a tutti i costi. –

risposta

2

Il problema era che stavo usando position: absolute all'interno di uno position: fixeddiv. L'esterno div stava ridimensionando correttamente, ma quello interno non lo era. La ragione per cui ho dovuto usare position: absolute era perché c'è un bug in WebKit che significa che non è possibile transformfixed posizionati div.

4

Questa non è esattamente la risposta alla tua domanda, ma noterai anche che WebView si ridimensiona quando si tratta di ingrandirsi, ma non si riduce quando l'altezza del contenuto diminuisce, come ho già risposto a questa domanda: WebView height = wrap_content with changing font size doesn't work

Il bug/funzione viene fatto riferimento sulla issue tracker di Google: https://code.google.com/p/android/issues/detail?id=18726

si prega di non prendetevela con me, volevo solo precisare che per ulteriori problemi si potrebbe incontrare con WebView.