html適配Anroid手機

本文完全是翻譯與總結谷歌官方的教程,已確保文檔的正確性。

免得大家被五花八門的其他的資料弄混了,也沒有系統行的學習。


一、設置窗口尺寸和適配屏幕分辨率

谷歌官方文檔提到兩個大的方面。

1.Viewport視圖窗口

這個是html中設置的。主要是設置高度和寬度,還有初始的比列。這個寬度與高度將絕對html裏面CSS中有多少個像素可用。

Viewport的寬度與屏幕的寬度沒有決定性的關係。比如你的手機寬度是480PX但是你可以設置Viewport的寬度爲960PX,這樣一張800PX的圖片就能一次性顯示完整,因爲很多瀏覽器比如chrome,會儘可能的縮放,縮小到能一屏幕能展現整個網頁,也就是960PX的寬度。

注意:使用webView時並不會默認使用 全局概要模式。也就是自動縮小,用這個方法設置一下就行setUseWideViewPort().

<head>
    <title>Example</title>
    <meta name="viewport" content="width=device-width, user-scalable=no" />
</head>

<meta name="viewport"
      content="
          height = [pixel_value | "device-height"] ,
          width = [pixel_value | "device-width"] ,
          initial-scale = float_value ,
          minimum-scale = float_value ,
          maximum-scale = float_value ,
          user-scalable = ["yes" | "no"]
          " />
注意:除非你確定你的程序自動適配的很好,而且在最小尺寸下也能使用,否則不要關閉user-scalable。

2.屏幕分辨率

html在CSS中寫的像素單位,在Android中等同於160DPI的手機。如果是320DPI的手機,就會對這個單位進行放大。比如如果一張300像素寬的圖片,在160PI中能正常的顯示,但是到了320DPI中的手機就會放大兩倍,這個時候圖片就會失真,模糊,有紋理。


二、通過CSS來適配

1.不同分辨率使用不同的CSS 

通過設置-webkit-device-pixel-ratio 這個屬性0.75,1,,1.5來對應低分率,中分辨率,高分辨率。其實就是下面的寫法

<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio: 1.5)" href="hdpi.css" />
<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio: 1.0)" href="mdpi.css" />
2.或者通過不同的style和樣式表,寫法如下

#header {
    background:url(medium-density-image.png);
}

@media screen and (-webkit-device-pixel-ratio: 1.5) {
    /* CSS for high-density screens */
    #header {
        background:url(high-density-image.png);
    }
}

@media screen and (-webkit-device-pixel-ratio: 0.75) {
    /* CSS for low-density screens */
    #header {
        background:url(low-density-image.png);
    }
}
更多關於如何適配分辨率尤其是圖片的適配可以參見 High DPI Images for Variable Pixel Densities.。

稍後如果有時間會把這個鏈接裏面的內容也總結一下。

三、通過javascript來適配


寫法如下:

Android瀏覽器或者WebView會通過 window.devicePixelRatio這個DOM文檔定義的屬性來指定當前的縮放比例。

默認的縮放比例是1.0.可以通過如下代碼來獲取比例,並作出對應的處理。

if (window.devicePixelRatio == 1.5) {
  alert("This is a high-density screen");
} else if (window.devicePixelRatio == 0.75) {
  alert("This is a low-density screen");
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章