2012-04-12 3 views
6

this question의 일부 코드를 사용하여 Android 기기가 회전했을 때를 감지하는 코드를 설정했습니다. 그것은 asus 타블렛 (4.0.3)과 두 개의 시뮬레이터 (4.0.3과 2.1)에서 훌륭하게 작동하지만, 불빛 (2.3.4)과 droidx (2.3.4)는 폭과 높이를 전환합니다.Android 기기에서 자바 스크립트를 사용하여 방향 감지

코드 :

회전이 0이고 해상도가 1280 X 800

입니다 : 아수스 태블릿

에서

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

출력이 풍경의 모습에서 개최

세로 방향

,515,

회전은 -90이고, 해상도는

프리

회전이 90이고, 해상도가 600 × 819

이다 킨 파이어 800 x 1,280

출력

초상 :

,363,210

회전은 0이고, 해상도가 droidx에서 1,024 X 395

출력

프리 :

회전이 90이고, 해상도가 320x488

초상 :

회전은 0이며, 해상도는

569x239이 방법이 있나요이다 내가 할 수

A) 대신 폭의 높이를 사용하거나 대신 높이

의 폭해야하는 경우 자바 스크립트가 감지 확인

또는

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 만 확인하고 곧 다른 도청 버전에 대한 확인을 추가 할 것입니다.

관련 문제