android webview 远程 html如何加载本地js

android webview 远程 html如何加载本地js,第1张

先把html文件下载到本地,然后更改html中js的路径为本地路径之后进行调用。

1.需要先写一个 LocalFileContentProvider

public class LocalFileContentProvider extends ContentProvider {

public static final String URI_PREFIX = "content://com.youpackage"//这里更改为你的包名

public static String constructUri(String url) {

Uri uri = Uri.parse(url)

return uri.isAbsolute() ? url : URI_PREFIX + url

}

@Override

public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {

File file = new File(uri.getPath())

ParcelFileDescriptor parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)

return parcel

}

@Override

public boolean onCreate() {

return true

}

@Override

public int delete(Uri uri, String s, String[] as) {

throw new UnsupportedOperationException("Not supported by this provider")

}

@Override

public String getType(Uri uri) {

throw new UnsupportedOperationException("Not supported by this provider")

}

@Override

public Uri insert(Uri uri, ContentValues contentvalues) {

throw new UnsupportedOperationException("Not supported by this provider")

}

@Override

public Cursor query(Uri uri, String[] as, String s, String[] as1, String s1) {

throw new UnsupportedOperationException("Not supported by this provider")

}

@Override

public int update(Uri uri, ContentValues contentvalues, String s, String[] as) {

throw new UnsupportedOperationException("Not supported by this provider")

}

}

2. 类似 jsUrl为网络端url jsPath为本地路径 data为html文件的字符串内容

data = data.replace(jsUrl, LocalFileContentProvider.URI_PREFIX+jsPath)

mWebView.loadDataWithBaseURL("http://yourwebsite", data, "text/html", "UTF-8", "")

这个是浏览器兼容的问题,可能原因:

浏览器的版本不同

跟分辨率也有关系,两天电脑的分辨率不同

这个是html网页,不用服务端交互的,是静态页面;所以根IIS没关系

关于css只要包含的路径没问题css加载正确,实质上css在网页内和外部都没关系的;(css放在外部比较符合代码规范,便于管理,如果css较多建议放在外边)

你这是css没做好浏览器兼容的问题,建议如果作网页就多下载几个浏览器

“怎么让网页能够放在任何地方都能正常打开呢?”要学好css,html和js;做好浏览器兼容

1)修改新建项目的res\Iayout目录下的布局文件main.xml,将默认添加的TextView组件删除,然后添加一个WebView组件

2)在MainActivity的onCreate()方法中,首先获取布局管理器中添加的Web View组件,然后创建一个字符串构建器,将要显示的HTML代码放置在该构建器中,最后应用IoadDataWithBaseURLO方法加载构建器中的HTML代码

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基准缩放。

下面是代码:

Java代码 

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  }     }

Android的webview加载本地html、本apk内html和远程URL

Android的webview加载本地html、本apk内html和远程URL

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基准缩放。

下面是代码:

Java代码 

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  }     }


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

原文地址:https://54852.com/zaji/6105004.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存