2013-08-19 146 views
6

我爲Firefox OS開發了一個Web應用程序,但我想讓它在Android中「本地」運行。我的應用程序由一個對話框組成,它是一個div,它在可見時填充整個頁面,我已經使用Firefox響應式設計工具進行了測試,並且它可以正確調整大小。當出現軟鍵盤時,由於對話框底部有一些按鈕,我希望對話框調整到左側的視口。WebView無法調整大小

我創建了一個只包含WebView的單個活動的應用程序。我想鍵盤出現時,調整視圖大小,所以我用:

android:windowSoftInputMode="stateUnspecified|adjustResize" 

這看起來是要對WebView任何差異,當鍵盤是可見的。我在網上看,有很多人抱怨這個問題,但他們都有共同的東西,他們使用Theme.Black.NoTitleBar.Fullscreen主題,我不是。我嘗試了所有解決這個問題的方法,但都沒有成功。

然後我開始懷疑WebView中是否有一個錯誤,這意味着它沒有調整大小。所以,我寫了一個定製View,它在onLayout中打印了尺寸。

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

當然,視圖在鍵盤出現和失望時正確調整大小。所以,我做了一些更多的研究,並且發現了一些答案,說你需要隱藏WebView,重新加載它,然後再顯示它。

@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); 
} 

再次,這並沒有解決我的問題。 (作爲一個方面,這是一個帶有單個.html文件的Web應用程序,JS導致應用程序中所有元素的狀態在運行時發生更改,因此不能重新加載它。)

My問題在於,在鍵盤可見時,是否有人知道一旦內容被加載後調整WebView的方法。

+0

我從來沒有遇到過這個問題。我的webview和它的內容總是正確調整大小。你正在測試什麼設備?此外,我使用「stateHidden | adjustResize」 –

+0

哇...你是對的!我創建了一個空的html頁面,其中包含一個固定的div,並按照預期調整大小。問題是我必須使用'position:absolute;'由於WebKit中的一個錯誤導致'fixed'元素不會對任何'-webkit-transform'做出反應,所以我必須找到另一種方式。 –

+0

很高興爲您提供幫助。一般情況下,我發現使用WebView的問題太多了(特別是在設備之間),並且會避免不惜一切代價使用它們。 –

回答

2

問題原來是我在position: fixeddiv內使用position: absolute。外層div正在調整大小,但內層不是。我不得不使用position: absolute的原因是因爲WebKit中存在一個錯誤,這意味着您不能定位divs,因此無法定位transformfixed