androidwebview适配屏幕
1. android webview默认屏幕为中像素密度怎么修改
Android中Webview加载的页面居中显示为中等像素密度的方法如下:
第一种方法:
WebSettings settings = webView.getSettings();
settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
LayoutAlgorithm是一个枚举用来控制页面的布局,有三个类型:
1.NARROW_COLUMNS:可能的话使所有列的宽度不超过屏幕宽度
2.NORMAL:正常显示不做任何渲染
3.SINGLE_COLUMN:把所有内容放大webview等宽的一列中
用SINGLE_COLUMN类型可以设置页面居中显示,页面可以放大缩小
第二种方法:
//设置加载进来的页面自适应手机屏幕
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
第一个方法设置webview推荐使用的窗口,设置为true。第二个方法是设置webview加载的页面的模式,也设置为true。这方法可以让你的页面适应手机屏幕的分辨率,完整的显示在屏幕上,可以放大缩小。
第三种方法:(主要用于平板,针对特定屏幕代码调整分辨率)
java">DisplayMetricsmetrics=newDisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
intmDensity=metrics.densityDpi;
if(mDensity==120){
settings.setDefaultZoom(ZoomDensity.CLOSE);
}elseif(mDensity==160){
settings.setDefaultZoom(ZoomDensity.MEDIUM);
}elseif(mDensity==240){
settings.setDefaultZoom(ZoomDensity.FAR);
}
Android中的webview其实是一个浏览器,对js进行解析以便于在智能机上面很好的显示。
2. webview怎么做适配html
webview适配html的方法是通过meta 标签指定屏幕的分辨率。
比如常用写法如下:
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
特殊说明:
这里表示 viewport 的宽度为匹配设备屏幕的宽度,且禁用缩放。涉及到两个概念:
viewport 元素
devicePixelRatio:设备上物理像素和设备独立像素(device-independent pixels (dips))的比例。
由于 iphone 手机和 android 4.0 以上的手机支持修改 viewport 的 width 来改变页面的缩放情况,因此我们可以将 width 指定为页面设计的宽度,如此一来,你的页面正好充满 viewport 并全屏显示,而不会缩放。例如:
<meta name="viewport" content="width=640px, user-scalable=no">
但是对于 android 4.0 以下的手机,不支持设置 viewport 的 width,但是我们可以设置 Android 的另一参数target-densitydpi,从而达到相同的目的,计算 target-densitydpi 的公式如下:
target-densitydpi = UI-width / device-width * window.devicePixelRatio * 160;
//UI-width :WebApp布局宽度
//device-width :屏幕分辨率宽度
最终的解决方法:
<meta name="viewport" content="target-densitydpi=device-dpi, width=640px, user-scalable=no">
$(function () {
var DEFAULT_WIDTH = 640, // 页面的默认宽度
ua = navigator.userAgent.toLowerCase(), // 根据 user agent 的信息获取浏览器信息
deviceWidth = window.screen.width, // 设备的宽度
devicePixelRatio = window.devicePixelRatio || 1, // 物理像素和设备独立像素的比例,默认为1
targetDensitydpi;
// Android4.0以下手机不支持viewport的width,需要设置target-densitydpi
if (ua.indexOf("android") !== -1 && parseFloat(ua.slice(ua.indexOf("android")+8)) < 4) {
targetDensitydpi = DEFAULT_WIDTH / deviceWidth * devicePixelRatio * 160;
$('meta[name="viewport"]').attr('content', 'target-densitydpi=' + targetDensitydpi +
', width=device-width, user-scalable=no');
}
// TODO: 其他手机需要特殊处理的在下面
});
3. webview android怎样适配手机屏幕
第一种: WebSetting settings = webView.getSettings(); settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 把所有内容放在webview等宽的一列中。(可能会出现页面中链接失效) 第二种: settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); 第三种: DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int mDensity = metrics.densityDpi; if (mDensity == 120) { settings.setDefaultZoom(ZoomDensity.CLOSE); }else if (mDensity == 160) { settings.setDefaultZoom(ZoomDensity.MEDIUM); }else if (mDensity == 240) { settings.setDefaultZoom(ZoomDensity.FAR); }
4. webview视频宽度适配
通过设置完成。webview官网显示可以通过设置webview的相关Setting完成页面的适配。但是存在问题是,这种的适配可以达到WebView的宽度适应手机屏幕宽度。
5. Android中系统应用对WebView的适配
Android 4.4 开始修改了浏览器的内核导致从5.0 开始,如果App为系统应用或者Root用户,将无法使用WebView进行加载网页的操作
错误日志如下:
java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes
针对错误修改方法:
1,替换WebView 如果只支持简单的
2,可以尝试分离把引用系统权限的部分分离成独立的app进行独立维护
3, 如果是定制版系统可以修改FrameWork层,注释掉相应的异常
public static void hookWebView() {
int sdkInt = Build.VERSION.SDK_INT;
try {
Class<?> factoryClass = Class.forName("android.webkit.WebViewFactory");
Field field = factoryClass.getDeclaredField("sProviderInstance");
field.setAccessible(true);
Object sProviderInstance = field.get(null);
if (sProviderInstance != null) {
Log.i("thi","sProviderInstance isn't null");
return;
}
Method getProviderClassMethod;
if (sdkInt > 22) {
getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass");
} else if (sdkInt == 22) {
getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass");
} else {
return;
}
getProviderClassMethod.setAccessible(true);
Class<?> providerClass = (Class<?>) getProviderClassMethod.invoke(factoryClass);
Class<?> delegateClass = Class.forName("android.webkit.WebViewDelegate");
Constructor<?> providerConstructor = providerClass.getConstructor(delegateClass);
if (providerConstructor != null) {
providerConstructor.setAccessible(true);
Constructor<?> declaredConstructor = delegateClass.getDeclaredConstructor();
declaredConstructor.setAccessible(true);
sProviderInstance = providerConstructor.newInstance(declaredConstructor.newInstance());
field.set("sProviderInstance", sProviderInstance);
}
} catch (Throwable e) {
e.printStackTrace();
}
}
6. 使用WKWebView自适应屏幕遇到的问题以及最后解决的方法
在网上找了很多方法我就不废话了 先一一列举出来
第一种方法:这种方法适配屏幕不是太好,双击才可以完全适配屏幕,有兴趣的话可以自己试一下
第二种方法:
在初始化WKWebView的时候添加配置可以解决自适应的问题 ,但是在加载的内容宽度大于高度的时候就有些不准确了,宽度无法自适应屏幕的宽度,最后我也没搞明白是因为什么原因,最后就放弃了这个方法。
//自适应屏幕宽度js
在加载的过程中我使用KVO监听加载的进度,从而获取最后加载内容的高度。
根据WKWebView的状态去判断是否加载完成:
有可能需要用到进度条和title属性
一定一定要记得移除KVO监听
第三种方法 也是我最后使用的方法:
我的需求是让图片的大小跟着屏幕的变化而变化,就是动态的去适应屏幕;那么文字的字体就是自己可以控制,可大可小。要想达到这样的效果,在用loadHTMLString加载字符串之前对它进行处理
处理HTMLString的原理:
原理就是用一个for循环,拿到所有的图片,对每个图片都处理一次,让图片的宽为100%,就是按照屏幕宽度自适应;让图片的高atuo,自动适应。文字的字体大小,可以去改font-size:14px
7. 请问android TV 上面 我就跑app里面就一个webView 电视屏幕分辨率是1900*1020的
mWebView.getSettings().setJavaScriptEnabled(true);
//intmInitialScale自适应屏幕百分比针对整个屏幕
mWebView.setInitialScale(mInitialScale);
//整个布局以焦点为中心放大缩小
mWebView.getSettings().setBuiltInZoomControls(true);
mWebView.loadUrl(url);
8. webview网页自适应屏幕大小怎么解决
方法1,建立不同分辨率的网页 。
方法2,以800*600建立网页,用表格限制宽度,在1024*768的时候就空出两边来了。
一般都用方法2,只要表格限定了就不会错位了 。
方法3,用css控制字体。不要用图层做网页 。
用CSS好。
要是不会CSS的话到网上下载一个别人网页的CSS文件,把里面的网址换上自己的就可以了。