安卓如何使用WebView组件加载HTML代码

安卓如何使用WebView组件加载HTML代码,第1张

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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9576803.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存