Android 4.1 масштабирование области просмотра ( setInitialScale, начальный масштаб мета не работает)

В SO и остальной части Интернета есть сотни сообщений о попытках исправить масштабирование области просмотра в Android, и теперь я совершенно уверен, что вы просто не можете установить начальный масштаб в веб-просмотре на Android 4.1.

Я создаю приложение Cordova (PhoneGap), и у меня есть все, что хорошо масштабируется на iPhone 3GS, 4S и 5 и iPad 2, работает под управлением iOS7 и 3GS на iOS6

У меня также есть масштабируемый пользовательский интерфейс, который подходит для Moto G, LG Nexus 5, Google Nexus 5 и Samsung Galaxy S4, все под управлением Android 4.4

Но на Samsung Galaxy S2 и S3 Mini под управлением Android 4.1 я не могу установить начальный масштаб.

Метатег HTML viewport не работает на 4.1 или 4.4 (работает в Chrome, а не в WebView или браузере по умолчанию):

<meta name="viewport" content="user-scalable=no, initial-scale=0.5, width=device-width, height=device-height, target-densitydpi=device-dpi" />

Я выбрал абсолютно простой проект Cordova из клики, cordova create basicProjectи если я добавлю немного Java к методу onCreate в основном Activity, в частности setInitialScale метод:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.init();
    // Set by <content src="index.html" /> in config.xml
    super.loadUrl(Config.getStartUrl());
    //super.loadUrl("file:///android_asset/www/index.html");

    this.appView.setInitialScale( 50  );

}

Затем я получаю Moto G на 4,4, как и ожидалось:

Moto G на Android 4.4 с начальной шкалой 0,5, через setInitialScale (50

Но точно такой же проект, работающий на Galaxy S2, не масштабируется.

Galaxy S2 на Android 4.1 с начальным масштабом 0,5, через setInitialScale (50

Я ограничиваюсь тестированием на устройствах Samsung с 4.1 или рядом устройств на 4.4, поэтому, если кто-то может протестировать то же самое на 4.2 или 4.3, или кто-то на 4.1, не с Samsung, это было бы полезно.

Кто-нибудь знает как заставить Android 4.1 подчиняться setInitialScale()

2 ответа

Решение

Вы должны быть в состоянии добавить некоторые javascript на свои веб-страницы, которые будут масштабировать контент, когда он будет выбран вашим веб-просмотром. Вот пример, который будет масштабировать ваш html контент так, чтобы контент соответствовал доступной ширине экрана:

function customScaleThisScreen() 
    var contentWidth = document.body.scrollWidth, 
        windowWidth = window.innerWidth, 
        newScale = windowWidth / contentWidth;
    document.body.style.zoom = newScale;
}

Это будет работать для старых (до 4.2) и новых веб-просмотров на основе хрома (4.2+).

HTHS

@Petey показал мне решение, но для полноты вот моя версия с чуть большим контекстом телефонной пропасти:

var app = {
    initialize: function() {
        this.bindEvents();
    },
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    onDeviceReady: function() {

        // PETEY'S SOLUTION, WRAPPED IN CODE TO CHECK FOR ANDROID PRE 4.2
        // ALSO MODIFIED TO USE DEVICE PIXEL RATIO, INSTEAD OF CONTENTWIDTH
        if( isAndroid() ) {
            var matches = device.version.match( /[0-9]+(\.[0-9]+)?/i );

            if( matches.length && parseFloat( matches[ 0 ] ) < 4.2 ) {
                document.body.style.zoom = 1 / window.devicePixelRatio;
            }
        }

        // start app logic

    }
};

app.initialize();

function isAndroid() {
    if( device.platform.match( /android/i ) ) {    
        return true;
    }

    return false;
}
Другие вопросы по тегам