理想的行为是:
在旋转时,重建布局 - 以适应新的屏幕尺寸。重构是用JQuery和数学完成的 - 而不是CSS。
脚本状态必须保持不变,同时运行计时器等。这些应该继续,就像什么也没发生一样。
为了达到这个目的,我做到了这一点:
为清单中的所有活动添加了android:configChanges =“orientation | keyboardHidden”,以便自己处理方向更改(注意:我没有针对某些API,所以我认为它默认为API 1.这意味着将screenSize添加到configChanges是没有必要的。)
为orientationchange添加了一个监听器:
window.onorientationchange = function(){ var orientation = window.orientation; 开关(方向){ 案例0: updateScaling(); 打破;
case 90:
updateScaling();
break;
case -90:
updateScaling();
break;
}
}
updateScaling仅调整布局。
这有时会起作用,但有时设备会崩溃(模拟器和真实设备)。在模拟器的日志中,我看到了这个警告:
WARN / ActivityManager(73):启动超时已过期,放弃唤醒锁定!
我做了研究,发现在活动中添加一个更长的loadUrlTimeoutValue可能会有所帮助,而且,我添加了super.setIntegerProperty(“loadUrlTimeoutValue”,60000);对主要活动,但正如预期的那样也无济于事。
我发现很多人抱怨PhoneGap出现旋转问题。可能框架只是这方面的错误吗?我也测试了Apple设备,在那里我甚至无法捕捉到旋转事件 - iPhone模拟器甚至没有改变方向,iPad改变了它但是没有调用事件处理程序并且布局保持相同的大小。我尝试使用一种解决方法,我发现将一个监听器附加到文档。但它也没有帮助。
旋转设备时是否有完全可靠的方法来重建布局?如果没有,我可以在使用某个应用程序初始化应用程序后禁用旋转(这意味着,我不想修复纵向或横向 - 我希望应用程序在使用当前应用程序初始化后禁用旋转更改)。有可靠的方法吗?
由于
答案 0 :(得分:0)
我不太确定这是否解决了崩溃问题,或者我在路上做了其他事情。
但我添加了一个可靠的监听器 - 至少在Android上:
$(window).resize(function() {
updateScaling($('body').width());
});
它始终被调用并传递正确的宽度。据我所知,它也适用于screen.width
在updateScaling中,我计算一个scalingFactor并调整我的元素。
我删除了window.onorientationchange。
注意:可能是在崩溃的时候我在清单中有android:configChanges =“keyboardHidden”而不是android:configChanges =“orientation | keyboardHidden”。 AFAIK这意味着系统重建活动,这可以解释超时。但在那种情况下我不知道为什么super.setIntegerProperty(“loadUrlTimeoutValue”,60000);没有帮助。
结论
$(window).resize与android结合使用:configChanges =“orientation | keyboardHidden”对我有用。