在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:
但是在Galaxy S2上运行的项目完全相同,不会缩放。
我仅限于使用4.1或者4.4上的一系列设备在三星设备上进行测试,因此如果任何人可以在4.2或4.3上测试相同的内容,或者4.1上没有使用三星的任何人测试相同的内容。 d会有所帮助。
有谁知道如何让Android 4.1服从setInitialScale()
答案 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;
}