论坛首页 移动开发技术论坛

[问题解决]WebView显示的网页在大分辨率屏下被放大 - 密度惹的祸

浏览 10811 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-08-31   最后修改:2011-09-10

 

例如适合800px宽度的页面,如果通过WebView在1024px的屏幕宽度下显示时,内容(图片)会被放大,整体页面会超出屏幕。

试了将WebView的settings中的缩放都关闭了也不行。

后来发现了WebSettings.ZoomDensity这个设置,并在文档中找到了以下说明:
Enum for specifying the WebView's desired density. FAR makes 100% looking like in 240dpi MEDIUM makes 100% looking like in 160dpi CLOSE makes 100% looking like in 120dpi

这样就能很好的说明以上问题的原因了,又是密度惹的祸...

默认WebView的ZoomDensity是MEDIUM,对应160dpi。而我之前800px宽度的屏幕对应的是160dpi,1024px宽度的屏幕对应的是240dpi。所以,页面在高分辨率的屏幕上被放大了1.5倍。这个和图片自缩放的机制是一样的。

于是,只要通过当前屏幕的密度,动态设置该属性就能适应不同屏幕(当然,默认你的页面是针对160dpi的密度大小设计的):

int   screenDensity   = getResources().getDisplayMetrics(). densityDpi ;
WebSettings.ZoomDensity   zoomDensity   = WebSettings.ZoomDensity. MEDIUM ;
switch (screenDensity){
case   DisplayMetrics.DENSITY_LOW :
    zoomDensity = WebSettings.ZoomDensity.CLOSE;
      break ;
case   DisplayMetrics.DENSITY_MEDIUM :
    zoomDensity = WebSettings.ZoomDensity.MEDIUM;
      break ;
case   DisplayMetrics.DENSITY_HIGH :
    zoomDensity = WebSettings.ZoomDensity.FAR;
      break ;
}
webview .getSettings().setDefaultZoom(zoomDensity) ;

即可解决。

 

   发表时间:2011-09-06  
你可以在html中声明<meta viewport>标签来解决这个问题。
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
这样更简单,而且兼容性好得多
0 请登录后投票
   发表时间:2011-09-10  
好的,谢谢你的建议。

sd6733531 写道
你可以在html中声明<meta viewport>标签来解决这个问题。
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
这样更简单,而且兼容性好得多

0 请登录后投票
   发表时间:2011-10-24  
我也遇到了LZ的问题,类似LZ的处理,毕竟页面不是我做的了
0 请登录后投票
   发表时间:2011-10-24  
精彩的帖子,回帖也很棒。
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics