通过WebView在Android设备上正确缩放网站

通过WebView在Android设备上正确缩放网站,android,Android,我的应用程序是一个简单的WebView“包装器”,它以固定的横向方向显示网页,网页的中心div为760px宽,415px高,应该在所有设备上按比例显示,以便(大致)适合屏幕,用户无法更改缩放。。。除了缩放,我几乎什么都能用 我在页面上有以下视口元标记: <meta name="viewport" content="width=device-width, target-densityDpi=device-dpi, initial-scale=1.0, maximum-scale=1.0, u

我的应用程序是一个简单的
WebView
“包装器”,它以固定的横向方向显示网页,网页的中心div为760px宽,415px高,应该在所有设备上按比例显示,以便(大致)适合屏幕,用户无法更改缩放。。。除了缩放,我几乎什么都能用

我在页面上有以下视口元标记:

<meta name="viewport" content="width=device-width, target-densityDpi=device-dpi, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
我应该提到的是,最初的
.apk
目标是Android 2.2,最近我改为2.3.1,并在清单中添加了另一行,但这对任何事情都没有影响:

android:xlargeScreens="true"
我在
.java
代码中添加了以下内容:

webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webview.setScrollbarFadingEnabled(false);
webview.getSettings().setSupportZoom(false);
webview.getSettings().setBuiltInZoomControls(false);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
就本问题而言,假设整个网站上的唯一内容是以下内容:


我的问题是,我无法在所有Android设备上提出一个“一刀切”的扩展解决方案,其他所有我交给自己的任务都很好

我已经在三种不同的设备上试过了,一台平板电脑和两部手机,在
层的左、右和底部都有很大的间隙。看起来760px的宽度两边各有一个50px的间隙,每个设备的底部都是一样的,我想做的就是把它放大,使它大致填满所有设备的屏幕

我的手机显示它有一个
窗口。innerWidth
为854,而
窗口。devicePixelRatio
为1.5,如果我将初始和最大比例更改为1.12,
层几乎完全适合我的设备。表中显示它有一个
窗口。innerWidth
为980,而
窗口。devicePixelRatio
为1.0,似乎是一个大约1.27的刻度。我不知道第三个设备的细节,但使用1.1似乎可以解决这个问题


当然,改变初始缩放并不是一个解决方案,即使尝试它也将是一场噩梦。所以,祈祷好运,有人能告诉我我错过了什么显而易见的东西,可以让这一切顺利吗?还是我只是在问一个不可能自动将视图缩放到固定大小的问题?

对。。。在回家的路上,我陷入了困境,有一个非常好的想法,我得出结论,我戏剧性地过度思考了这个问题

这很粗糙,但它可以完成工作,我从站点中删除了meta标记,并将其添加到应用程序中:

// Set up up the scaling value
float scaling = 100;
int display_width;
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
display_width = dm.widthPixels;
scaling = (((float)display_width/760)*100); // 760 here is my container div width
scaling = (int) Math.floor(scaling); 
// Set up the webview and apply the scale value
webview = (WebView) findViewById(R.id.webview);
webview.setInitialScale((int)scaling);  
这很有效,但自从我发表这篇文章以来,我遇到了两个问题

首先,通过删除meta标记,我似乎已经消除了对最大/最小刻度的限制,这意味着单击显示Android键盘的任何
元素将导致刻度的变化。幸运的是,将这一行添加到代码中解决了这个问题:

webview.getSettings().setDefaultZoom(ZoomDensity.FAR);
第二,我没有一个可行的解决方案,而且有些设备,比如Archos101平板电脑,有软件按钮而不是硬件按钮。这里的缩放代码将缩放到设备宽度,这意味着该站点位于软件按钮下方。。。目前正在考虑实施一个基于
READ\u PHONE\u STATE
的解决方案,或者可以选择添加不带硬件按钮退出应用程序的功能,并将其添加到清单中:

<uses-permission android:name="archos.permission.FULLSCREEN.FULL" />


希望其他人会发现这一点并为自己节省一些时间。

欢迎使用堆栈溢出!一旦你有能力,确保并标记你的答案为已接受,以便其他人知道有解决方案。谢谢乔纳森!我已经编辑了我的问题和答案,应该为任何遇到它的人提供他们所需要的一切,以获得一个面向风景、固定宽度的站点,并在几乎所有设备上使用一个简单的.apk webview包装器。
webview.getSettings().setDefaultZoom(ZoomDensity.FAR);
<uses-permission android:name="archos.permission.FULLSCREEN.FULL" />