android上基于webkit开发页面小结(1)
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