获得方向改变后Android移动设备的真实宽度

Get real width of Android mobile device after orientationchange

本文关键字:真实 移动 方向 改变 Android      更新时间:2023-09-26

使用Android HTML5和Javascript真是令人沮丧。

这一次,我试图找出当前的屏幕大小(宽度)DOM加载时,当用户改变方向:

  • 屏幕。width在不同android版本上的工作方式完全不同。无法使用。
  • jQuery的$(window).width()返回实际宽度,但它在方向改变之前触发。我尝试了200ms的超时,也不工作。

然后我尝试了这个片段:

var deviceWidth = window.orientation == 0 ? window.screen.width : window.screen.height;
if (navigator.userAgent.indexOf('Android') >= 0 && window.devicePixelRatio) {
  deviceWidth = deviceWidth / window.devicePixelRatio;
}

在某些android版本中,它会根据方向改变,在某些版本中则不会。

有什么建议吗?

谢谢!

编辑/解决方案:

这就是我在Android和iOS上的工作方式:

$( window ).on( "orientationchange", function( event ) {
  //console.log( "This device is in " + event.orientation + " mode!" );
  var oc_timer;
  clearTimeout(oc_timer);
  oc_timer = setTimeout(function () {
    //do your magic stuff with jQuery's $(window).width()
  }, 500);
);
$( window ).orientationchange(); //fire it manually on page load

尝试在bind函数中使用timeout,如下所示

  $(window).bind( 'orientationchange', function(e){
    setTimeout(function() {
       var device_width = $(window).width();
     },500);
   });

在这里阅读更多:JavaScript中的设备和视口大小

  • 如何获取视口大小
  • 如何获取设备尺寸
  • 如何获取文档大小

另请参阅:http://www.w3schools.com/js/js_window_screen.asp

这个方法将获得您的设备的尺寸:

Point size = new Point();
Display display = getWindowManager().getDefaultDisplay();
int height = 0;
int width = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB_MR2) {
    display.getSize(size);
    width = size.x;
    height = size.y;
} else {
    width = display.getWidth();
    height = display.getHeight();
}