6

この質問のいくつかのコードを使用して、Androidデバイスがいつ回転したかを検出するコードを設定しました。asus タブレット (4.0.3) と 2 つのシミュレーター (4.0.3 および 2.1) ではうまく機能しますが、kindle fire (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>

asusタブレットからの出力

風景のように見えるものでそれを保持します:

回転は0、解像度は1280×800

肖像画

回転は -90 で、解像度は 800 x 1280 です。

Kindle Fire からの出力

風景

回転は 90 度、解像度は 600 x 819 です。

ポートレート:

回転は 0 で、解像度は 1024 x 395 です。

droidx からの出力

風景:

回転は 90 度、解像度は 320x488 です。

ポートレート:

回転は 0、解像度は 569x239

できる方法はありますか

a)幅の代わりに高さを使用するか、高さの代わりに幅を使用する必要があるかをjavascriptに検出させます

また

b) デバイスが幅と高さの正しい値を報告するようにしますか?

4

1 に答える 1

1

しばらく調べたところ、これは 2.2 および 2.3 OS のバグであることがわかりました。このコードをアプリに入れることで、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

そして、横向きモードかどうかを検出するために:

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

これで十分に混乱しない場合は、ボディが最初に読み込まれるときに、ランドスケープ モードかどうかが問題になります。そのため、独自の回避策をバイパスする必要がありました。

<body onload="if(isBugged()){uagent = 'bypass';}/*code that depends on isLandscape()*/;uagent = navigator.userAgent.toLowerCase();">

それは本当の苦痛であり、本来あるべきよりもはるかに多くの仕事です. 特に、2.1 では機能しますが、2.3.4 では機能しないためです。本当にイライラしますが、それが私が持っているものです。現時点では、sdk 10 のみをチェックしています。バグのある他のバージョンのチェックをすぐに追加する予定です。

于 2012-04-12T22:18:13.760 に答える