2012-04-12 3 views
6

this questionのコードを使用して、アンドロイドデバイスが回転したときを検出するコードを設定しました。これはasusタブレット(4.0.3)と2つのシミュレータ(4.0.3と2.1)には効果的ですが、火の火災(2.3.4)とdroidx(2.3.4)では幅と高さが切り替わります。アンドロイドデバイスのjavascriptを使用して向きを検出する

コード:風景のように見えるもので、それを持っASUSのタブレット

から

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

出力:

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

です

ポートレート

回転は-90であり、解像度は

風景

回転が90であり、解像度が600×819

あるKindleの火災から800×1280

出力されます。

ポートレート:

回転が0であり、解像度はdroidxから1024×395

出力さ

風景:

回転が90であり、解像度が320x488

あります

ポートレート:

回転が0で、解像度は私が

ことができる方法は569x239

ありますされるa)のではなく、高さ

するのではなく、幅または幅の高さを使用する必要がある場合はJavascriptを検出してください

または

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

答えて

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.4では動作しますが2.3.4では動作しないためです。本当にイライラしていますが、それは私が持っているものです。現時点では、私はsdk 10のみをチェックします、私はすぐに他の盗難されたバージョンのチェックを追加するつもりです。

関連する問題