一、关于WebView适用屏幕的开发过程
由于刚学习android不久,手头上的一个BI相关项目也比较简单。大体是上班是导航按钮,用android实现,下面是一个WebView,用来加载一些html图表。开始项目进展的挺顺利的,但到后来在几个屏幕打下不同的平板上做测试时,WebView遇到了屏幕适用性的问题。
1、首先,在开发时用的是三星的七寸平板,由于里面html中一些表的影响,需要传一个html页面的高度进去,不能写百分比去自动适用,所以在java代码里面就先去算WebView所占的高度,因为我上面导航部分和logo部分是固定高度,大概130dip,根据网上的一些资料用以下代码计算:
DisplayMetrics displaymetrics = new DisplayMetrics();
displaymetrics = getResources().getDisplayMetrics();
final float scale =getResources().getDisplayMetrics().density;
int topHeight=(int)(140 * scale + 0.5f);//多次调整发现多10比较合适
height = (int)((displaymetrics.heightPixels-topHeight));
在将这个height传入html,发现这样设置后适用7寸平板比较合适,但8寸、10寸的就不能适用了,会出现滚动条或者很短。
2、在多次尝试后,发现越大的屏幕,计算出的高度超出的越多,就尝试着将最后的高度再除以scale值,结果还真差不多了,
height = (int)((displaymetrics.heightPixels-topHeight)/scale);
这样看,传进html里面的高度也需要转换成dip的值。但这样设置后,个别的html页面仍然有点点误差,可能还里面的布局有关系。
3、最后,老大要求WebView中的图表可以缩放,所以就去设置WebView缩放相关的参数。如下设置(红色字体):
WebView myWebView = new WebView(getActivity());
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
// can read the json file on local
webSettings.setAllowUniversalAccessFromFileURLs(true);
webSettings.setDefaultTextEncodingName("utf-8");
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true);
webSettings.setDefaultZoom(ZoomDensity.CLOSE);
这样设置后可以缩放了,而且没想到的是,经过上两步骤设置html高度遗留的误差问题也没有了,基本可以完整的适用了。
但是,到目前为止,还有一个问题遗留,详细如下:
当缩放语句中有
webSettings.setUseWideViewPort(true);
时,7寸、八寸三星平板以及模拟器都是可以的,但在10寸的模拟器上面测试时,如果有此语句会出现滚动条,但能正常缩放,给人初始化页面时放大了的感觉。
如果去掉此语句(webSettings.setUseWideViewPort(true);),则七寸、八寸平板出现滚动条且不能缩放,但10寸平板很正常且能缩放。
对于这个问题不知是不是漏了一个什么参数没有设置,如果那位高手看到了麻烦回复告诉我一下,在此先谢谢了。
二、关于模拟器大小的设置
在用模拟器测试应用程序时,总感觉同意尺寸的模拟器和真机大小差别很大,而且有时运行效果也有很大差别,尤其像我这次有webview的项目感觉特别明显,最后发现在启动模拟器时有参数可以设置。
我以前在模拟器运行app时总是运行时右击运行android application,然后选择一个模拟器,让应用和默认模拟器同时启动。现在才发现最好是先在模拟器管理器里面先启动,然后运行应用时弹出、然后选择已启动的设备,因为这样可以设置一些参数。如下:
首先在设备里启动需要启动的模拟器:
然后设置模拟器和电脑尺寸:
点击“Launch"后启动模拟器。
在运行app前记得如下图勾选
这样启动运行的模拟器就和真实设备是一样的了。