
1)修改新建项目的res\Iayout目录下的布局文件mainxml,将默认添加的TextView组件删除,然后添加一个WebView组件
2)在MainActivity的onCreate()方法中,首先获取布局管理器中添加的Web View组件,然后创建一个字符串构建器,将要显示的HTML代码放置在该构建器中,最后应用IoadDataWithBaseURLO方法加载构建器中的HTML代码
android客户端常会调用到html页面,给webview页面适配android凌乱的设备带来很大的困难。
可以找到的方法是通过ZoomDensitysetDefaultZoom根据分辨率480宽度为基准缩放。
不过ZoomDensitysetDefaultZoom在20以下的平台是无法调用的,需要自己反射调用。
即使是ZoomDensitysetDefaultZoom设置了缩放,但还是会在很多设备无效。经过摸索还需做一些修改:
1,页面head添加
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
2,设置字体也按480基准缩放。
下面是代码:
Java代码
private void setZoom(WebSettings webSettings) { int screenDensity = getResources()getDisplayMetrics()densityDpi; String zd = "FAR"; switch (screenDensity) { case DisplayMetricsDENSITY_LOW: zd = "CLOSE"; break; case DisplayMetricsDENSITY_MEDIUM: zd = "MEDIUM"; break; } Class<> zoomDensityClass = null; Enum<> zoomDensity = null; try { if (zoomDensityClass == null) { zoomDensityClass = ClassforName("androidwebkitWebSettings$ZoomDensity"); } if (zoomDensity == null) { zoomDensity = (Enum<>) EnumvalueOf((Class) zoomDensityClass,zd); } Method method = WebSettingsclassgetDeclaredMethod( "setDefaultZoom", new Class<>[] { zoomDensityClass }); if(method!=null){ methodinvoke(webSettings, zoomDensity); } method = WebSettingsclassgetDeclaredMethod( "setTextZoom", new Class<>[] { intclass }); if(method!=null){ methodinvoke(webSettings, 100 getWindowManager()getDefaultDisplay()getWidth() / 480); } } catch (Exception e) { Loge(TAG, egetMessage()); return; } }Android的webview加载本地html、本apk内html和远程URL
Android的webview加载本地html、本apk内html和远程URL
android客户端常会调用到html页面,给webview页面适配android凌乱的设备带来很大的困难。
可以找到的方法是通过ZoomDensitysetDefaultZoom根据分辨率480宽度为基准缩放。
不过ZoomDensitysetDefaultZoom在20以下的平台是无法调用的,需要自己反射调用。
即使是ZoomDensitysetDefaultZoom设置了缩放,但还是会在很多设备无效。经过摸索还需做一些修改:
1,页面head添加
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
2,设置字体也按480基准缩放。
下面是代码:
Java代码
private void setZoom(WebSettings webSettings) { int screenDensity = getResources()getDisplayMetrics()densityDpi; String zd = "FAR"; switch (screenDensity) { case DisplayMetricsDENSITY_LOW: zd = "CLOSE"; break; case DisplayMetricsDENSITY_MEDIUM: zd = "MEDIUM"; break; } Class<> zoomDensityClass = null; Enum<> zoomDensity = null; try { if (zoomDensityClass == null) { zoomDensityClass = ClassforName("androidwebkitWebSettings$ZoomDensity"); } if (zoomDensity == null) { zoomDensity = (Enum<>) EnumvalueOf((Class) zoomDensityClass,zd); } Method method = WebSettingsclassgetDeclaredMethod( "setDefaultZoom", new Class<>[] { zoomDensityClass }); if(method!=null){ methodinvoke(webSettings, zoomDensity); } method = WebSettingsclassgetDeclaredMethod( "setTextZoom", new Class<>[] { intclass }); if(method!=null){ methodinvoke(webSettings, 100 getWindowManager()getDefaultDisplay()getWidth() / 480); } } catch (Exception e) { Loge(TAG, egetMessage()); return; } }1场景1
UIwebview和WKWebview点击页面空白处,webview页面会出现上移的现象。
解决办法:
第一种方案:取消页面自动布局 selfautomaticallyAdjustsScrollViewInsets=NO;
selfedgesForExtendedLayout=UIRectEdgeNone;
第二种方案:将坐标原点设置为导航右下角:
selfnavigationControllernavigationBartranslucent=NO;
2场景2 从有原生导航的页面进入无导航的页面(webview页面内部跳转),发现跳转回来之后出现一个20像素的向上偏移(跟状态栏的高度一致)
解决方法:
第一种方案:监听此事件的H5,back返回方法。
向下偏移20像素
[selfwebviewscrollView setContentInset:UIEdgeInsetsMake(20, 0, 0, 0)];
第二种方案:将坐标原点设置为导航右下角:
selfnavigationControllernavigationBartranslucent=NO;
3场景3:
在iOS 11系统和iOS 11一下系统设置取消自动布局会有很大差异,iOS 11页面显示正常,而iOS 11以下则向上偏移了一个系统导航栏的高度
为了实现webview向上滑动可以隐藏title栏,目前最简便的方法就是使用CordinatorLayout,要在CordinatorLayout中使用Webview,就必须使Webview实现NestedScrollingChild接口或者将WebView嵌套在实现了NestedScrollingChild接口的View(例如NestedScrollView,RecylerView)中。
先贴一下布局文件
此时webview的高度为当前页面全部内容的高度,由于硬件性能限制,图层绘制的高度有最大值,超过最大值会造成无法绘制图层异常,同时如果没有crash,也会因为滑动被NestedScrollView拦截无法判断内容是否滑到底部去加载更多;如果尝试在页面加载完成后重新绘制Webview的大小以避免上述异常,则会因为滑动 *** 作被NestedScrollView拦截而网页内容无法滑动,因此,Google给出的建议是不要将Webview放在NestedScrollView中。
参考: >
当你上网阅读东西时,我们一般会选择一款浏览器,比如Chrome、火狐、safari、IE或者Edge。你可能不知道这些浏览器之间有一些竞争,而竞争的主要形式就是WebView。
WebView的定义
什么是WebView呢?它是本地应用程序内嵌的一个浏览器!这句话有两处需要搞清楚!
上面是火狐的一个页面,红色区域可以认为是WebView,它拥有渲染引擎,可以通过>
以上就是关于安卓如何使用WebView组件加载HTML代码全部的内容,包括:安卓如何使用WebView组件加载HTML代码、Hybrid开发之webview发生偏移的解决办法、在CordinatorLayout中使用Webview等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)