android的庫中有一個webkit庫,系統會預設安裝一個基於webkit的瀏覽器,同時開發人員也可以基於webkit(webview)開發應用程式,這樣的應用程式可以直接顯示web頁面,從而提高開發速度,在開發針對此類應用程式的web頁面時,前段開發人員,需要做些適應和轉變,以下以問題形式進行總結,並不斷補充
1.一款號稱480*800的解析度,顯示不全480寬的圖片?
現象:480的圖片只顯示了一部分,倒是320的圖片剛好顯示完整
原因分析:android映入了density的概念,系統自己會有一個預設的值,如果你的頁面沒有強制要求,就會使用這個值,而為了考慮相容性,在120和240密度的機器上,會預設使用160從而導致不理想,具體可以參考
解決方案:在頁面上聲明針對裝置的dpi進行適配
<meta name="viewport" content="target-densitydpi=device-dpi, width=device-width" />
這個viewport還有其他很多的屬性,如控制預設縮放比例,是否允許縮放等 可以參考如下連結
http://developer.android.com/guide/webapps/targeting.html
2.android2.3系統,頁面中的輸入框獲得焦點時,整個頁面會放大
現象:基於1的解決方案,在2.3系統(480*800)上出了點問題,可輸入控制項獲得焦點,鍵盤彈出整個頁面會被放大,導致無法全部顯示
原因分析:查了一些資料,2.3的sdk說明中也沒有這樣的說法,經過測試發現,2.3中系統內建瀏覽器中user-scalable=no 根本就不起作用,仍然可以用手進行縮放(基於webkit開發的程式沒這個問題,但是會有頁面變大的現象),關鍵點:輸入框獲得焦點時,頁面放大的程度剛好和dpi=160相同(480*800 dpi實際是240的),從而發現,2.3的系統中webkit中縮放模式的優先順序高於了頁面的設定
解決方案:系統瀏覽器,只好手動設定zoom mode為far從而解決(這個似乎沒什麼意義)
基於webkit的用戶端程式則可以直接設定websetting的defaultzoom為far setDefaultZoom(WebSettings.ZoomDensity zoom)
參考http://developer.android.com/reference/android/webkit/WebSettings.html