webview页面随设备分辨率缩放

本文探讨了在Android客户端中使用WebView展示HTML页面时遇到的布局混乱问题,并提供了解决方案,包括设置viewport元标签、按480基准调整字体大小以及通过反射调用WebSettings的ZoomDensity方法来实现不同分辨率下的适配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android客户端常会调用到html页面,给webview页面适配android凌乱的设备带来很大的困难。

可以找到的方法是通过ZoomDensity.setDefaultZoom根据分辨率480宽度为基准缩放。

不过ZoomDensity.setDefaultZoom在2.0以下的平台是无法调用的,需要自己反射调用。

即使是ZoomDensity.setDefaultZoom设置了缩放,但还是会在很多设备无效。经过摸索还需做一些修改:

1,页面head添加

     <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />

 

2,设置字体也按480基准缩放。

 

下面是代码:

 

 

    private void setZoom(WebSettings webSettings) {
	int screenDensity = getResources().getDisplayMetrics().densityDpi;
	String zd = "FAR";
	switch (screenDensity) {
	case DisplayMetrics.DENSITY_LOW:
	    zd = "CLOSE";
	    break;

	case DisplayMetrics.DENSITY_MEDIUM:
	    zd = "MEDIUM";
	    break;
	}
	Class<?> zoomDensityClass = null;
	Enum<?> zoomDensity = null;

	try {
	    if (zoomDensityClass == null) {
		zoomDensityClass = Class.forName("android.webkit.WebSettings$ZoomDensity");
	    }
	    if (zoomDensity == null) {
		zoomDensity = (Enum<?>) Enum.valueOf((Class) zoomDensityClass,zd);
	    }

	    Method method = WebSettings.class.getDeclaredMethod( "setDefaultZoom", new Class<?>[] { zoomDensityClass });
	    if(method!=null){
		method.invoke(webSettings, zoomDensity);
	    }
	    
	    method = WebSettings.class.getDeclaredMethod( "setTextZoom", new Class<?>[] { int.class });
	    if(method!=null){
		method.invoke(webSettings, 100 * getWindowManager().getDefaultDisplay().getWidth() / 480);
	    }
	} catch (Exception e) {
	    Log.e(TAG, e.getMessage());
	    return;
	}
    }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值