我有一个基本网页,可以在Android平板电脑(Nexus 7)上的Chrome中显示时,正确响应屏幕尺寸和方向变化(使用CSS媒体查询)。当我在WebView中显示相同的页面时,基于屏幕宽度的媒体查询不起作用。以下是我设置WebView的方法:
WebView webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.loadUrl("http://10.0.1.8:8080/cbc/test");
WebView根据以下媒体查询的行为正确检测方向更改:
@media only screen and (orientation: portrait) {
.landscape { display: none; }
}
@media only screen and (orientation: landscape) {
.portrait { display: none; }
}
使用屏幕尺寸的媒体查询无法正常工作,因为根据以下JavaScript,屏幕宽度和高度在方向更改时保持不变:
$("#dimensions").empty();
$("#dimensions").append($("<div>Width: " + screen.width + "</div>"));
$("#dimensions").append($("<div>Height: " + screen.height + "</div>"));
$("#dimensions").append($("<div>Depth: " + screen.pixelDepth + "</div>"));
我使用“orientationchange”事件触发前面的代码。在Android上的Chrome中运行时,会正确显示宽度和高度值,并将设备方向考虑在内。在WebView内部运行时,无论方向如何,宽度和高度都保持不变。
我是否需要将某些配置应用于WebView以获得预期的行为?
答案 0 :(得分:0)
尝试查看window.innerWidth
&amp;您的javascript中的window.innerHeight
。
答案 1 :(得分:0)
加载HTML后(屏幕更改后或任何更改),您需要WebView CONTENTS的宽度和高度。 是的,但是没有 getContentWidth 方法(只有视图端口值), 并且 getContentHeight ()不准确!
答案:子类WebView:
/*
Jon Goodwin
*/
package com.example.html2pdf;//your package
import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;
class CustomWebView extends WebView
{
public int rawContentWidth = 0; //unneeded
public int rawContentHeight = 0; //unneeded
Context mContext = null; //unneeded
public CustomWebView(Context context) //unused constructor
{
super(context);
mContext = this.getContext();
}
public CustomWebView(Context context, AttributeSet attrs) //inflate constructor
{
super(context,attrs);
mContext = context;
}
public int getContentWidth()
{
int ret = super.computeHorizontalScrollRange();//working after load of page
rawContentWidth = ret;
return ret;
}
public int getContentHeight()
{
int ret = super.computeVerticalScrollRange(); //working after load of page
rawContentHeight = ret;
return ret;
}
//=========
}//class
//=========
答案 2 :(得分:-1)
对于现代屏幕,您需要指定像素比率。 CSS术语中的像素是测量值,而不是实际像素。高分辨率屏幕和视网膜显示器的像素尺寸不同。制造商尝试基于像素作为大小进行显示,但它不适用于媒体查询。您需要执行以下媒体查询:
@media
only screen and (-webkit-min-device-pixel-ratio: 2),
only screen and ( min--moz-device-pixel-ratio: 2),
only screen and ( -o-min-device-pixel-ratio: 2/1) {
//CSS here
}