android webView加载页面时显示出全部网页内容

//在加载页面时显示出整个网页内容

webView.getSettings().setUseWideViewPort(true);
 webView.getSettings().setLoadWithOverviewMode(true);

 

//出现放大缩小的按钮功能

  webView.getSettings().setBuiltInZoomControls(true);// 
  webView.getSettings().setSupportZoom(true);

 

//初始缩放比例

 settings.setUseWideViewPort(true); // 是否支持任意比例缩放
  wv_showHTML.setInitialScale(60);


主要是关于webview打开网页后的屏幕适应问题。

首先贴一段网上流传的代码:
  //Support different screens     
 4         int screenDensity = mMyActivity.getResources().getDisplayMetrics().densityDpi;  
 5         switch (screenDensity){   
 6         case DisplayMetrics.DENSITY_LOW :  
 7             mWebView.getSettings().setDefaultZoom(ZoomDensity.CLOSE);  
 8             break;  
 9         case DisplayMetrics.DENSITY_MEDIUM:  
10             mWebView.getSettings().setDefaultZoom(ZoomDensity.MEDIUM);  
11             break;  
12         case DisplayMetrics.DENSITY_HIGH:  
13             mWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);  
14             break ;
15         case DisplayMetrics.DENSITY_XHIGH:  
16             mWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);  
17             break ;  
18         case DisplayMetrics.DENSITY_TV:  
19             mWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);  
20             break ; 
21         }

这段代码的不靠谱之处在于:
1.明明case下有五种dpi,android库却只提供close,medium,far三个缩放因子(分别对应LOW,MEDIUM,HIGH,默认是MEDIUM),即便当dpi达到XHIGH(既320DPI)时,也只能设置far,显然是不正常的。

2.实际设备的实际dpi无法获取,因为无法得知设备的物理英寸,上面方法得到dpi值仅是个近似值。

如果单纯用上面的代码做屏幕缩放,对于一些机型肯定是不正常,并且无法估计长宽,比如一张1280宽的图片在实际dpi为X(X > 240 且 x < 320),分辨率为1280的设备上,有可能会被放大1.25倍,或是1.5倍。

如果想要得到正常的倍率,是需要配合网页端的。(这里仅讨论html5的场合,跨平台嘛)

个人认为,由网页方面写死一个宽,再提供一个js的缩放函数(包括图片,字体),根据不同设备的分辨率来调用,是比较理想的。(当然,也可以用穷举法,一个分辨率进一个网页,用不同css和不同大小资源 =_=!)

假设宽定位1280,则html5方面必须有:

1  < meta  name ="viewport"  content ="width=1280, initial-scale=1.0,maximum-scale=2.0, minimum-scale=0.5, user-scalable=no,target-densitydpi=device-dpi"   />

其中,target-densitydpi
是最重要的,它将配合android端的以下代码使用。


1          // use html5 viewport attribute
2          settings.setLoadWithOverviewMode( true);
3         settings.setUseWideViewPort( true);


表示我们的代码支持html5网页自适应。所谓杀什么畜生用什么刀,网页的事情,dpi适应什么的,就交给html5去做好了 = =,不用我们在更外面一层蛋疼。

这样做之后,1280宽的图片无论在什么设备的分辨率都是正常的尺寸,不会被做倍数不明的拉伸,方便我们控制。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android WebView 实现离线加载原来的缓存页面,你可以使用以下步骤: 1. 设置 WebView 的缓存模式为 `LOAD_CACHE_ELSE_NETWORK`,这样 WebView 会优先加载缓存,如果缓存不存在才从网络加载数据。可以使用 `setCacheMode` 方法设置缓存模式: ```java webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); ``` 2. 确保 WebView 启用了 DOM 存储和数据库存储功能,这样可以在离线仍然能够使用相关的本地存储数据。可以使用以下方法启用这些功能: ```java webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setDatabaseEnabled(true); ``` 3. 在加载 WebView 的网页之前,检查设备的网络连接状态。如果设备处于离线状态,你可以手动加载缓存的页面,否则 WebView 将按照缓存模式加载页面。示例代码如下: ```java ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo(); if (networkInfo == null || !networkInfo.isConnected()) { // 设备离线状态 webView.loadUrl("file:///android_asset/offline.html"); // 加载离线页面 } else { // 设备在线状态,WebView 根据缓存模式加载网页 webView.loadUrl("https://example.com"); // 加载网页 } ``` 在上述代码中,如果设备处于离线状态,则加载位于 assets 目录下的 offline.html 页面,你可以根据需要替换为你自己的离线页面路径。 通过以上步骤,当设备处于离线状态WebView加载之前缓存的页面,而不是尝试从网络加载新的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值