2012-04-12 13 views
6

Mit etwas Code von this question Ich habe einen Code eingerichtet, um zu erkennen, wenn ein Android-Gerät gedreht wird. Es funktioniert gut für das asus-Tablet (4.0.3) und zwei Simulatoren (4.0.3 und 2.1), aber für das Kindle-Feuer (2.3.4) und Droidx (2.3.4) schaltet es die Breite und Höhe.Erkennung der Orientierung mit JavaScript auf Android-Geräten

Code:

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

Ausgabe von asus Tablette

es in Betrieb, was Landschaft sieht aus wie:

Die Rotation ist 0 und die Auflösung beträgt 1280 x 800

Porträt

Die Rotation ist -90 und die Auflösung beträgt 800 x 1280

Ausgabe von Kindle Fire

Landschaft

Die Rotation ist 90 und die Auflösung beträgt 600 x 819

Porträt:

Die Rotation ist 0 und die Auflösung von 1024 x 395

Ausgabe von DroidX

Landschaft:

Die Rotation ist 90, und die Auflösung ist 320x488

Porträt:

Die Rotation ist 0 und die Auflösung 569x239

Gibt es eine Möglichkeit, ich kann

a) Stellen Sie die Javascript erkennen, ob es Höhe statt Breite oder Breite statt Höhe

verwenden sollten

ODER

b) Lassen Sie die Geräte die korrekten Werte für ihre Breite und Höhe melden?

Antwort

1

Nachdem ich eine Weile länger gesucht habe, habe ich herausgefunden, dass dies ein Fehler mit dem 2.2 und 2.3 Betriebssystem ist. Ich habe den Fehler mit 2.3.4 behoben, indem ich diesen Code in meine App eingefügt habe.

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 

Und dann zum Erkennen, ob ich im Landschaftsmodus bin:

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

Und wenn das nicht verwirrend genug war, wenn der Körper zunächst Lasten, es ist recht, wenn es im Querformat oder nicht. Also musste ich meine eigene Problemumgehung umgehen.

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

Es ist ein echter Schmerz, viel mehr Arbeit, als es sein sollte. Zumal es in 2.1 aber nicht 2.3.4 funktioniert. Wirklich frustrierend, aber genau das habe ich. Im Moment schaue ich nur nach SDK 10, ich werde bald weitere Bugs hinzufügen.

Verwandte Themen