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我从来没有遇到过这个问题,所以我不知道,但在删除我的答案之前,我建议你用一个物理设备测试你的方向更改侦听器,因为否则就不可能发现由模拟器上不可用的方向引起的错误。嗯,它似乎在真实的设备上运行良好。模拟器一定有问题。我怎样才能解决这个问题?