2017-09-13 82 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