nic*_*ick 6 javascript java android
使用这个问题的一些代码,我已经设置了一些代码来检测Android设备何时被旋转.它适用于华硕平板电脑(4.0.3)和两个模拟器(4.0.3和2.1),但对于点火(2.3.4)和droidx(2.3.4),它可以切换宽度和高度.
码:
<script type="text/javascript">
var supportsOrientationChange = "onorientationchange" in window,orientationEvent = supportsOrientationChange ? "orientationchange" : "resize";
window.addEventListener(orientationEvent, function() {
alert("The rotation is " + window.orientation + " and the resolution is " + screen.width + " x " + screen.height);
modRule();
}, false);
</script>
Run Code Online (Sandbox Code Playgroud)
华硕平板电脑输出
把它拿在看起来像风景的地方:
旋转为0,分辨率为1280 x 800
肖像
旋转为-90,分辨率为800 x 1280
从Kindle Fire输出
景观
旋转为90,分辨率为600 x 819
肖像:
旋转为0,分辨率为1024 x 395
droidx的输出
景观:
旋转为90,分辨率为320x488
肖像:
旋转为0,分辨率为569x239
我有办法吗?
a)使javascript检测它是否应使用高度而不是宽度或宽度而不是高度
要么
b)让设备报告宽度和高度的正确值?
经过一段时间的研究,我发现这是 2.2 和 2.3 操作系统的一个错误。我通过将此代码放入我的应用程序中修复了 2.3.4 的错误。
browser = (WebView)findViewById(R.id.webBrowser);
browser.setBackgroundColor(Color.BLACK);
WebSettings webSettings = browser.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setUserAgentString("Android " + android.os.Build.VERSION.SDK);//this is so the JavaScript knows what version of the OS I'm using
Run Code Online (Sandbox Code Playgroud)
然后检测我是否处于横向模式:
var uagent = navigator.userAgent.toLowerCase();
function isLandscape()
{
var width = screen.width;
var height = screen.height;
if (isBugged())
{
var temp = width;
width = height;
height = temp;
}
var landscape = width > height;
return landscape;
}
function isBugged()
{
return uagent == "android 10"
}
Run Code Online (Sandbox Code Playgroud)
如果这还不够令人困惑的话,当主体最初加载时,它是否处于横向模式是正确的。所以我不得不绕过我自己的解决方法。
<body onload="if(isBugged()){uagent = 'bypass';}/*code that depends on isLandscape()*/;uagent = navigator.userAgent.toLowerCase();">
Run Code Online (Sandbox Code Playgroud)
这真的很痛苦,比应有的工作要多得多。特别是它在 2.1 中有效,但在 2.3.4 中无效。真的很令人沮丧,但这就是我所拥有的。目前,我只检查 sdk 10,我将很快添加对其他有 bug 的版本的检查。
| 归档时间: |
|
| 查看次数: |
3500 次 |
| 最近记录: |