WebView整理

显示兼容性

首先明确一下两个重要概念:
1. 视窗(viewport):视窗就是网页可见的矩形区域,可以指定大小和缩放比例等属性。最重要属性是视窗的宽度,这个宽度是从网页的角度来看水平方向上所有可用的像素总数。
2. 屏幕密度:WebView和大部分Android浏览器会把CSS的像素值转换为dip单位值,Android中在160dpi的密度下1dip=1px。所以最好考虑到不同密度下的缩放问题。

1.设置视窗属性

视窗的物理宽度一般就是WebView的宽度,但是视窗可显示内容的宽度可以比物理宽度更宽。比如说屏幕宽度为480px的话,视窗物理宽度也为480px,但是却可以完全显示一个宽度为800px的网页,而且缩放是1.0倍。这是通过设置wideViewportMode来实现的,wideViewportMode大概是980px左右。也可以设置overviewMode来完全显示网页。

WebView默认不会使用wideViewportMode,可以通过调用setWideViewPort()开启。

可以在网页的<head>中设置viewport的属性:

<meta name="viewport"
      content="
          height = [pixel_value | "device-height"] ,
          width = [pixel_value | "device-width"] ,
          initial-scale = float_value ,
          minimum-scale = float_value ,
          maximum-scale = float_value ,
          user-scalable = ["yes" | "no"]
          " />

比如说这样子声明:

<head>
    <title>Example</title>
    <meta name="viewport" content="width=device-width, user-scalable=no" />
</head>

网页针对移动端进行适配的话最好是设成width=device-width。

2.根据屏幕密度设置CSS

可以根据不同屏幕密度提供不同的CSS,比如:

<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio: 1.5)" href="hdpi.css" />
<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio: 1.0)" href="mdpi.css" />

1.0代表mdpi,0.75代表ldpi,1.5代表hdpi,依此类推。

也可以在同一个CSS中对屏幕密度进行区分:

#header {
    background:url(medium-density-image.png);
}

@media screen and (-webkit-device-pixel-ratio: 1.5) {
    /* CSS for high-density screens */
    #header {
        background:url(high-density-image.png);
    }
}

@media screen and (-webkit-device-pixel-ratio: 0.75) {
    /* CSS for low-density screens */
    #header {
        background:url(low-density-image.png);
    }
}
3.使用JavaScript

Android浏览器和WebView提供一个DOM属性来查询当前设备的密度:window.devicePixelRatio,这个属性值就是网页需要缩放的比例。该值由网页的目标密度和当前设备密度来决定。网页目标密度默认是mdpi。

比如在JavaScript代码中可以这样调用:

if (window.devicePixelRatio == 1.5) {
  alert("This is a high-density screen");
} else if (window.devicePixelRatio == 0.75) {
  alert("This is a low-density screen");
}

WebView的使用

<?xml version="1.0" encoding="utf-8"?>
<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

网络权限的申请:

<manifest ... >
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

加载网页:

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("http://www.example.com");

JavaScript的使用

开启JavaScript:

WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值