Titanium / Appcelerator Alloy未正确检测方向变化

时间:2017-03-21 12:21:51

标签: 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.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);    
});

初始

  • 我正在使用Andriod Emulater和Nexus 6。
  • 我在0 degrees开始关闭应用程序(正常人像位置)。

程序启动时我得到以下输出:

Orientation: 1        (Same as Ti.UI.PORTRAIT)
Portrait: true
Landscape: false
1440 x 2392

90度

90 degrees位置旋转手机时,事件甚至没有触发! 为什么不呢?

180度

再次顺时针旋转到180 degrees位置会触发事件并在控制台上显示以下正确值:

orientation changed!
Orientation: 4         (Same as Ti.UI.LANDSCAPE_RIGHT)
Portrait: false
Landscape: true
2392 x 1440

(请注意,即使手机在技术上处于纵向状态,但应用程序会显示在风景中,因为手机的方式是错误的。这是预期的Android行为)

270度

再次顺时针旋转到270 degrees位置会触发事件并提供以下正确值:

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

0度

然而,当再次顺时针旋转(返回0 degrees)时,我得到的值不正确:

orientation changed!
Orientation: 2         (Same as Ti.UI.UPSIDE_PORTRAIT)
Portrait: false
Landscape: true
2392 x 1440

请注意:

  • 声称应该是横向模式
  • e.orientation似乎在Ti.UI.UPSIDE_PORTRAIT Ti.UI.PORTRAIT时给出了半正确的结果。activityQuery没什么大不了的。
  • 宽度和高度已被翻转(可能是因为它认为它仍处于风景中)!

问题

  1. 为什么第一次轮换不会触发事件!
  2. 为什么最后一次旋转显示所有值的值都不正确。

1 个答案:

答案 0 :(得分:3)

orientationchange监听器内部,如果检查e.orientation并将其与常规方向常量(Ti.UI.PORTRAIT, Ti.UI.UPSIDE_PORTRAIT, Ti.UI.LANDSCAPE_LEFT, Ti.UI.LANDSCAPE_RIGHT)进行比较,可能会更好。

这是因为还有其他方向(FACE_DOWN, FACE_UP),一旦我疯狂地试图理解为什么我的一些客户有时会注意到一些“闪烁”(从FACE_DOWN移动到{{1} })。

此外:使用真实设备测试您的听众,因为在模拟器中测试FACE_UP事件几乎完全没用。