2017-09-13 57 views
0

我有一个较旧的Android Titanium应用程序,它使用Titanium SDK 5.5.1(由于代码使用Ti.include,因此我无法使用SDK 6+)。该应用程序使用WebView来显示本地CSS样式的HTML内容。最近,一些运行Android 6+的Android设备突然开始使用巨大的字体来显示WebView内容,这些字体用几个字填满屏幕。这发生在某些设备上,但不是其他设备,我无法在我用于测试的设备(运行Android 7.0的三星Galaxy S7)或任何仿真器(Genymotion或内置Android SDK)上复制它。Android WebView在某些设备上异常大缩放级别和字体大小

我试过了所有我能想到的东西。我使用的各种选项设置中继检视 - 目前其计算方法如下,每安卓建议:

<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 

我尝试添加宽度=设备宽度的内容,但并没有发挥作用,显然这是推断和当使用initial-scale = 1.0时不需要。

我也硬编码字体大小的CSS属性设置像素大小在页面样式头和包装div类,仍然没有运气。

body {font-size:13px;} 
.contentClass {font-size:13px;} 

我也尝试将WebView的scalesToFit属性从false(旧设置)更改为true,但没有区别。似乎没有任何工作,字体在某些设备上仍然很大。

的创建网页视图代码如下,没有什么特别的:

var webView = Ti.UI.createWebView({ 
     top:0, 
     html:htmlContent, 
     width: Titanium.UI.FILL, //webview is added to main window which is the set to device screen width 
     height: '100%', 
     scalesPageToFit: true, //tried false as well 
     enableZoomControls: false, 
}); 

的应用程序有许多活跃用户现在谁抱怨因为这个原因。由于我无法在我的开发环境中复制这个问题,所以我在黑暗中工作。一些遇到此问题的用户正在帮助我测试修复程序,但调试起来相当困难。任何见解都将非常感激。

回答

1

我想出了这个问题的原因,并认为我会分享我的解决方案。

首先,Android WebViews使用Chrome浏览器呈现代理,自5.0版(Lollipop)以来,它已被移至Chrome APK,因此可以独立于操作系统进行更新。在最近的某个时候,Chrome的新版本导致我的WebView停止工作。你可以在这里了解更多: https://developer.chrome.com/multidevice/webview/overview

我通过停用我的测试手机上的Chrome来发现这一点。这样做的效果是将Chrome恢复到设备工厂安装版本的Chrome版本,该版本可能比最新版本的Chrome版本要旧,具体取决于手机。就我而言,默认的Chrome版本(56.x)工作正常,最新版本(60.0.3112.116)破坏了我的WebView。

的实际原因问题是一个古老的设置,我在我的Android清单,即机器人:anyDensity =“假”:

<supports-screens android:anyDensity="false" android:largeScreens="true" 
       android:normalScreens="true" android:smallScreens="true"/> 

的anyDensity设置告诉Android的应用程序是否支持任何密度屏幕。我很久以前就把它设置为false,因为它具有自动缩放我的应用程序以适应各种屏幕尺寸的效果。不是一个好的方法,但它很长一段时间运作良好。但是,最近的Chrome版本不再处理这个问题,导致WebView显示出巨大的放大和误差,并且对视口设置等没有响应。它还导致了一些其他奇怪的非WebView行为,例如View opacity无法正常工作。

删除anyDensity设置或将其设置为true(这是默认设置)解决了问题。 Android建议将其设置为true,除非有充分理由将其设置为false,如位图处理。这应该以编程方式完成,而不是在清单中全局化。 https://developer.android.com/guide/topics/manifest/supports-screens-element.html