Designing web page for Android webview
Selasa, 6 November 2012, 9:31 pm0
Android screen built-in resolutions (based on API 8-16):
Skin | Resolution (w x h pixel) | Orientation |
---|---|---|
QVGA | 240 x 320 | Portrait |
WQVGA400 | 240 x 400 | Portrait |
WQVGA432 | 240 x 432 | Portrait |
HVGA | 320 x 480 | Portrait |
WVGA800 | 480 x 800 | Portrait |
WVGA854 | 480 x 854 | Portrait |
WSVGA | 1024 x 600 | Landscape |
WXGA720 | 1280 x 720 | Landscape |
WXGA, WXGA800, WXGA800-7in | 1280 x 800 | Landscape |
Android screen density
Density | DPI / Pixel ratio | Skin |
---|---|---|
ldpi | 120 / 0.75 | QVGA, WQVGA400, WQVGA432 |
mdpi | 160 / 1.0 | HVGA, WSVGA, WXGA |
tvdpi | 213 / 1.33125 | WVGA800-7in |
hdpi | 240 / 1.5 | WVGA800, WVGA854 |
xhdpi | 320 / 2.0 | WXGA720, WXGA800 |
Android webview viewport size (100% width and height)
Skin | Viewport (w x h pixel, portrait) |
---|---|
QVGA | 320 x 427 |
WQVGA400 | 320 x 533 |
WQVGA432 | 320 x 576 |
HVGA | 320 x 480 |
WVGA800 | 320 x 533 |
WVGA854 | 320 x 569 |
WSVGA | 600 x 1024 |
WXGA720 | 360 x 598 |
WXGA | 800 x 1280 |
WXGA800 | 400 x 598 |
WXGA800-7in | 601 x 962 |
In the HTML page, make sure we lock the webpage from being resize/zoom
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1" />
To design responsive web page, pay attention to webview viewport size in writing the css media query. From the viewport size table above, if we’re designing for portrait orientation only, we have a set of widths: 320, 360, 400, 600, 800 (601 can use 600 width styles). So our css code must be organized like this:
/* width: 800 */ .container { width: 800px; } /* width: 600 */ @media (max-width: 799px) { .container { width: 600px; } } /* width: 400 */ @media (max-width: 599px) { .container { width: 400px; } } /* width: 360 */ @media (max-width: 399px) { .container { width: 360px; } } /* width: 320 */ @media (max-width: 359px) { .container { width: 320px; } }
Note: Since landscape width got more, choose widths that can be grouped together, e.g: 420, 480, 530, 960, 1024, 1280
In handling different screen density using css, it’s recommended to display images as background of html elements.
HTML:
<i class="icon ok"></i>
CSS:
.icon { width: 50px; height: 50px; display: block; background-size: 50px 50px; } .icon.ok { background-image: url(img/mdpi/icon_ok.png); }
That’s for the base density (mdpi). For other densities:
/* density: xhdpi */ @media screen and (-webkit-device-pixel-ratio: 2.0) { .icon.ok { background-image: url(img/xhdpi/icon_ok.png); } } /* density: hdpi */ @media screen and (-webkit-device-pixel-ratio: 1.5) { .icon.ok { background-image: url(img/hdpi/icon_ok.png); } } /* density: ldpi */ @media screen and (-webkit-device-pixel-ratio: 0.75) { .icon.ok { background-image: url(img/ldpi/icon_ok.png); } }
Note: for tvdpi, it’ll use hdpi stylesheet & resize accordingly.
Image sizes. To know what image size you need, use pixel ratio to resize the image (base design is using 1.0 pixel ratio). Image DPI (dot per inch) is 72. E.g:
Image file | Density / Pixel ratio | Size |
---|---|---|
img/ldpi/icon_ok.png | ldpi / 0.75 | 50 x 0.75 = 38px |
img/mdpi/icon_ok.png | mdpi / 1.0 | 50 x 1.0 = 50px |
img/hdpi/icon_ok.png | hdpi / 1.5 | 50 x 1.5 = 75px |
img/xhdpi/icon_ok.png | xhdpi / 2.0 | 50 x 2.0 = 100px |
15 November 2012
19 September 2012