開發Webview的技術,小的技術知識點

風的王子發表於2014-10-27

轉載和總結:

Android WebView中軟鍵盤會遮擋輸入框相關問題


要想實現這種軟鍵盤出現的時候會自動把輸入框的佈局頂上去的效果,需要設定輸入法的屬性,有以下兩種設定方式:

    一、在java程式碼中設定如下:
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE|  
             WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
  二、在androidmanifest.xml中設定與其對應的activity的屬性如下:
     android:windowSoftInputMode="stateHidden|adjustPan"
  正常情況下,設定了該屬性之後,軟鍵盤在彈出時,輸入框便不會被遮擋。
  但是該屬性在有些情況下是不生效的,目前我所知的是以下兩種情況:
   一、 當前activity被設定了全屏屬性,即           android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
   二、webview的相關佈局被固定了高度,這裡也分為兩種情況:
          1.根佈局固定了高度,這裡的根佈局是webview所在的Activity的最外層佈局;
          2.根佈局未固定高度,但是根佈局是FrameLayout佈局,而webview或者其父控制元件被固定了高度。(專案中遇到的就是這種情況,經過反覆對比測試,終於找到原因,希望分享出來,能幫助其他人)
         以上的這兩種固定的高度都會導致軟鍵盤遮擋輸入框的問題,需格外留意。
ps:固定了高度,是指layout_height屬性被賦予了具體多少dp或px。
-------------------------------------------------------------------------------------------------------------

android webview js alert對話方塊 不能彈出 解決辦法


在配置了webview的setting屬性後,以前設定的都是可以直接彈出來的,今天寫一個小demo時候莫名其妙的發現alert怎麼也出來,即使設定了這麼多也不行:

webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setAllowFileAccess(true);// 設定允許訪問檔案資料
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webSettings.setDomStorageEnabled(true);
webSettings.setDatabaseEnabled(true);

解決辦法:
webview只是一個承載體,各種內容的渲染需要使用webviewChromClient去實現,所以set一個預設的基類WebChromeClient就行,程式碼如下:

mWebView.setWebChromeClient(new WebChromeClient());

相關文章