viewport与android的webview

随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用

是最好的选择。然而,每一款手机有不同的分辨率,不同屏幕大小,如何使我们开发出来的应用或页面大小能适合各种高端手

机使用呢?学习html5 viewport的使用能帮你做到这一点……
webView控件要启用支持viewport属性。例如android中

webSettings.setUseWideViewPort(true);
设置是否支持viewport属性。设置为true后,如果html中没有明码定义viewport,webview则用默认的viewport
width=html里定义的宽
initial-scale = 1.0
user-scalable = yes
target-densitydpi = medium-dpi

webSettings.setLoadWithOverviewMode(true);
以概览模式加载,必须以webSettings.setUseWideViewPort(true)为前提。以概览模式加载必须
width=与html里定义的宽一致或者为device-width。(任意测试后感觉是一样的效果)
initial-scale = 不定义
user-scalable = yes

有时候还不能概览浏览时因为
minimum-scale默认值太大可以调小一点。

viewport 的width只能大于webview宽。


设置时不能自相矛盾,例如:
webSettings.setUseWideViewPort(true)
user-scalable = no
或者设置了
initial-scale =的具体值。这样设置不会以概览方式显示的。

viewport 的width只能大于或等于html宽,否则都是无效值。

viewport 的width只能大于webview宽的以概览模式加载也会出现滚动条。

viewport 语法介绍:
01  <!-- html document -->
02  <meta name="viewport"
03      content="
04          width = [pixel_value | device-width ] ,
05          height = [pixel_value | device-height] ,
06          initial-scale = float_value ,
07          minimum-scale = float_value ,
08          maximum-scale = float_value ,
09          user-scalable = [yes | no] ,
10          target-densitydpi = [dpi_value | device-dpi | high-dpi | medium-dpi | low-dpi]
11      "
12  />
width
控制 viewport 的大小,可以指定的一个值或者特殊的值,如 device-width 为设备的宽度(单位为缩放为 100% 时的 CSS 的

像素)。

height
和 width 相对应,指定高度。

target-densitydpi
一个屏幕像素密度是由屏幕分辨率决定的,通常定义为每英寸点的数量(dpi)。Android支持三种屏幕像素密度:低像素密度

,中像素密度,高像素密度。一个低像素密度的屏幕每英寸上的像素点更少,而一个高像素密度的屏幕每英寸上的像素点更多

。Android Browser和WebView默认屏幕为中像素密度。

下面是 target-densitydpi 属性的 取值范围

device-dpi –使用设备原本的 dpi 作为目标 dp。 不会发生默认缩放。
high-dpi – 使用hdpi 作为目标 dpi。 中等像素密度和低像素密度设备相应缩小。
medium-dpi – 使用mdpi作为目标 dpi。 高像素密度设备相应放大, 像素密度设备相应缩小。 这是默认的target density.
low-dpi -使用mdpi作为目标 dpi。中等像素密度和高像素密度设备相应放大。
<value> – 指定一个具体的dpi 值作为target dpi. 这个值的范围必须在70–400之间。
1  <!-- html document -->
2  <meta name="viewport" content="target-densitydpi=device-dpi" />
3  <meta name="viewport" content="target-densitydpi=high-dpi" />
4  <meta name="viewport" content="target-densitydpi=medium-dpi" />
5  <meta name="viewport" content="target-densitydpi=low-dpi" />
6  <meta name="viewport" content="target-densitydpi=200" />
为了防止Android Browser和WebView 根据不同屏幕的像素密度对你的页面进行缩放,你可以将viewport的target-densitydpi

设置为 device-dpi。当你这么做了,页面将不会缩放。相反,页面会根据当前屏幕的像素密度进行展示。在这种情形下,你还

需要将viewport的width定义为与设备的width匹配,这样你的页面就可以和屏幕相适应。

initial-scale
初始缩放。即页面初始缩放程度。这是一个浮点值,是页面大小的一个乘数。例如,如果你设置初始缩放为“1.0”,那么,

web页面在展现的时候就会以target density分辨率的1:1来展现。如果你设置为“2.0”,那么这个页面就会放大为2倍。

maximum-scale
最大缩放。即允许的最大缩放程度。这也是一个浮点值,用以指出页面大小与屏幕大小相比的最大乘数。例如,如果你将这个

值设置为“2.0”,那么这个页面与target size相比,最多能放大2倍。

user-scalable
用户调整缩放。即用户是否能改变页面缩放程度。如果设置为yes则是允许用户对其进行改变,反之为no。默认值是yes。如果

你将其设置为no,那么minimum-scale 和 maximum-scale都将被忽略,因为根本不可能缩放。

所有的缩放值都必须在0.01–10的范围之内。

例:

(设置屏幕宽度为设备宽度,禁止用户手动调整缩放)

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

(设置屏幕密度为高频,中频,低频自动缩放,禁止用户手动调整缩放)

<meta name="viewport" content="width=device-width,target-densitydpi=high-dpi,initial-scale=1.0, minimum-

scale=1.0, maximum-scale=1.0, user-scalable=no"/>

猜你喜欢

转载自wenzongliang.iteye.com/blog/2200661