Android WebView 輸入框鍵盤不彈出

jopen 9年前發布 | 31K 次閱讀 Android開發 移動開發 Android WebView

問題

在Android中使用內嵌的WebView加載HTML網頁時,如果html頁面中存在輸入框。那么在有些手機設備中,當輸入框獲取焦點時,系統輸入法鍵盤無法正確彈出,從而無法完成正常的輸入要求

在做APP時,自己也遇到了這個問題,以下是自己解決的方法,有可能不適合大家所遇到的情況,但值得借鑒~

WebView設置問題

有些時候我們設計的html頁面并不能夠很好的適應WebView,尤其我們的html頁面是為PC瀏覽器設計的時候,當使用WebView來加載時,界面很可能會發生錯亂,當input輸入框被其他元素(例如:div)覆蓋,即使input能夠顯示和選中,但輸入法依然不會彈出。在這種情況下我們能做到的只有
     1、WebView.getSettings().setUseWideViewPort(true),使WebView能自適應手機屏幕大小,自由縮放,使得WebView和PC瀏覽器更相似,避免界面布局錯亂,減少問題出現的概率
     2、為html提供移動版本

代碼失誤

有些時候我們需要自定義WebView來滿足特定的需求,比如我們想為WebView添加一個加載進度條,來統一WebView進度條的顯示,那么就有可能出現如下的代碼
public class ProgressBarWebView extends WebView{

    public ProgressBarWebView(Context context) {
        this(context, null);
    }
    public ProgressBarWebView(Context context, AttributeSet attrs){
        this(context, attrs, 0);
    }
    public ProgressBarWebView(Context context, AttributeSet attrs, int defStyle){
        super(context, attrs, defStyle);
        // TODO
        // your code
    }

}

這段代碼會有什么問題呢?在使用ProgressBarWebView的時候,如果在layout中不指定style的話,那么將會進入到

    public ProgressBarWebView(Context context, AttributeSet attrs){
        this(context, attrs, 0);
    }
構造方法中,這里我們指定為0,如果去查看Android WebView的源代碼,是如下定義的

public WebView(Context context, AttributeSet attrs) {
     this(context, attrs, com.android.internal.R.attr.webViewStyle);
}
必須為WebView附加com.android.internal.R.attr.webViewStyle樣式,不然WebView不能正常的工作

總結

以上就是自己總結的一些方法,希望對大家有幫助~

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!