Android 钛/Appcelerator合金未正确检测方向变化

Android 钛/Appcelerator合金未正确检测方向变化,android,titanium,appcelerator,appcelerator-titanium,titanium-alloy,Android,Titanium,Appcelerator,Appcelerator Titanium,Titanium Alloy,当我用钛检测方向时,我有一些奇怪的行为 代码 这是我在index.js上使用的代码: // Start code Ti.API.info('Orientation: ' + Ti.Gesture.orientation); Ti.API.info('Portrait: ' + Ti.Gesture.portrait); Ti.API.info('Landscape: ' + Ti.Gesture.landscape); Ti.API.info(Ti.Platform.displayCaps.pl

当我用钛检测方向时,我有一些奇怪的行为

代码 这是我在
index.js
上使用的代码:

// Start code
Ti.API.info('Orientation: ' + Ti.Gesture.orientation);
Ti.API.info('Portrait: ' + Ti.Gesture.portrait);
Ti.API.info('Landscape: ' + Ti.Gesture.landscape);
Ti.API.info(Ti.Platform.displayCaps.platformWidth + ' x ' + Ti.Platform.displayCaps.platformHeight);

// Code when orientation changes
Ti.Gesture.addEventListener('orientationchange',function(e) {
    Ti.API.info('orientation changed!');
    Ti.API.info('Orientation: ' + e.orientation);
    Ti.API.info('Portrait: ' + e.source.isPortrait());
    Ti.API.info('Landscape: ' + e.source.isLandscape());
    Ti.API.info(Ti.Platform.displayCaps.platformWidth + ' x ' + Ti.Platform.displayCaps.platformHeight);    
});
首字母
  • 我在Nexus6上使用Andriod模拟器
  • 我在
    0度
    (正常纵向位置)启动应用程序
当程序启动时,我得到以下输出:

Orientation: 1        (Same as Ti.UI.PORTRAIT)
Portrait: true
Landscape: false
1440 x 2392
90度 将手机旋转到
90度
位置时,事件甚至不会触发为什么不呢?

180度 再次将其顺时针旋转到
180度
位置会触发事件,并在控制台上给出以下正确值:

orientation changed!
Orientation: 4         (Same as Ti.UI.LANDSCAPE_RIGHT)
Portrait: false
Landscape: true
2392 x 1440
(请注意,尽管从技术上讲,手机是纵向的,但应用程序在横向显示,因为手机的方向不对。这是预期的Android行为)

270度 再次将其顺时针旋转到
270度
位置将触发事件,并给出以下正确值:

orientation changed!
Orientation: 4         (Same as Ti.UI.LANDSCAPE_RIGHT. Should be Ti.UI.LANDSCAPE_LEFT?)
Portrait: false
Landscape: true
2392 x 1440
orientation changed!
Orientation: 2         (Same as Ti.UI.UPSIDE_PORTRAIT)
Portrait: false
Landscape: true
2392 x 1440
零度 但是,当再次顺时针旋转(回到
0度
)时,我得到了不正确的值:

orientation changed!
Orientation: 4         (Same as Ti.UI.LANDSCAPE_RIGHT. Should be Ti.UI.LANDSCAPE_LEFT?)
Portrait: false
Landscape: true
2392 x 1440
orientation changed!
Orientation: 2         (Same as Ti.UI.UPSIDE_PORTRAIT)
Portrait: false
Landscape: true
2392 x 1440
请注意:

  • 当它应该处于纵向模式时,它声称处于横向模式
  • e.oritation
    似乎给出了
    Ti.UI.uperstation
    的半正确结果,而它应该是
    Ti.UI.patrait
    。没什么大不了的
  • 宽度和高度已经翻转(可能是因为它认为它仍然在风景中)
问题
  • 为什么第一轮没有触发事件
  • 为什么最后一次旋转显示的所有值都不正确

  • orientationchange
    监听器中,如果您检查
    e.orientation
    并将其与正常的方向常数(
    Ti.UI.crative,Ti.UI.uppose\u-crative,Ti.UI.scannel\u LEFT,Ti.UI.scannel\u RIGHT
    )进行比较,可能会更好

    这是因为还有其他的方向(
    面朝下,面朝上
    ),我曾经疯狂地试图理解为什么我的一些客户有时会注意到一些“闪烁”(从
    面朝下
    移动到
    面朝上


    此外:使用真实设备测试您的侦听器,因为在模拟器中测试
    orientationchange
    事件几乎毫无用处。

    这并不能解释为什么在第一次旋转时甚至不会触发该事件。它也不能解释为什么在最后一次旋转时宽度和高度是错误的。@YahyaUddin试一下,试试我给你的建议。忘了iPortrait和isLandscape方法吧,但我已经有了。请看问题。它是事件处理程序的第二行,就在
    Ti.API.info('orientation changed!')下面。我还对问题进行了编辑,使其更加清晰。这不会改变事件在第一次旋转时甚至不会触发的事实@YahyaUddin我从来没有遇到过这个问题,所以我不知道,但在删除我的答案之前,我建议你用一个物理设备测试你的方向更改侦听器,因为否则就不可能发现由模拟器上不可用的方向引起的错误。嗯,它似乎在真实的设备上运行良好。模拟器一定有问题。我怎样才能解决这个问题?