Android 4.1视口缩放(setInitialScale,元初始缩放不起作用)

时间:2014-07-08 15:59:44

标签: android cordova webview viewport initial-scale

在SO和其他互联网上有数百篇关于尝试在Android中修复视口缩放的帖子,我现在相当确定您无法在Android 4.1的网页视图中设置初始比例。

我正在建立一个Cordova(Phonegap)应用程序,我已经在iPhone 3GS,4S和5以及iOS 2上运行iOS7和iOS6上的3GS的所有东西都得到了很好的扩展

我还推出了适合Moto G,LG Nexus 5,Google Nexus 5和三星Galaxy S4的UI,全部运行Android 4.4

但是在运行Android 4.1的三星Galaxy S2和S3 Mini上,我无法设置初始规模。

HTML视口元标记不适用于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" />

我已经从cli cordova create basicProject敲了一个绝对基本的Cordova项目,如果我在主Activity中的onCreate方法中添加了一些Java,特别是setInitialScale方法:< / p>

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:

Moto G on Android 4.4 with an initial-scale of 0.5, via setInitialScale(50)

但是在Galaxy S2上运行的项目完全相同,不会缩放。

Galaxy S2 on Android 4.1 with an initial-scale of 0.5, via setInitialScale(50)

我仅限于使用4.1或者4.4上的一系列设备在三星设备上进行测试,因此如果任何人可以在4.2或4.3上测试相同的内容,或者4.1上没有使用三星的任何人测试相同的内容。 d会有所帮助。

有谁知道如何让Android 4.1服从setInitialScale()

2 个答案:

答案 0 :(得分:7)

您应该能够在网页上添加一些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

答案 1 :(得分:1)

@Petey向我展示了解决方案,但为了完整性,我的版本带有更多的phonegap背景:

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;
}