首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何禁用Air for Android中的方向更改

如何禁用Air for Android中的方向更改
EN

Stack Overflow用户
提问于 2012-06-21 15:30:27
回答 8查看 3.4K关注 0票数 0

我对我为Android with Air开发的一款游戏有一个问题。这个应用程序会正确地定位(停留在横向),直到我锁定我正在测试的手机,然后解锁。当手机解锁时,应用程序将处于纵向模式(它应该始终处于横向模式)。

在描述符xml文件中,我将全屏设置为true,宽高比设置为横向,自动定向设置为false,但在锁定和解锁时,这似乎不会影响应用程序(它在任何其他情况下都能正常工作)。当解锁时,它将再次变成肖像,并且不会移回风景(所以自动定向是假的肯定不会被干涉)。

这个问题只会在你运行游戏并锁定手机和解锁的时候触发。例如,如果您按下主页按钮,使应用程序不再处于焦点位置,则锁定和解锁,然后返回到暂停的游戏,它仍将处于水平状态。

编辑:我刚刚有了一个重要的发现!这似乎取决于你在手机上使用的锁屏类型。我用的是android 4 galaxy s3。我切换到不使用锁屏,当我解锁时,应用程序停留在横向!这就是进步。不幸的是,我的朋友用的是另一部安卓4.0手机,他报告了同样的问题,所以不仅仅是我的手机。

EN

回答 8

Stack Overflow用户

发布于 2012-06-21 16:14:03

将其放入应用描述符xml

代码语言:javascript
复制
<aspectRatio>portrait</aspectRatio>
<autoOrients>false</autoOrients>
票数 2
EN

Stack Overflow用户

发布于 2012-09-27 09:18:54

我也有同样的问题。我已经在一些不同的设备上进行了测试。如果锁定屏幕需要密码,它们中的大多数实际上会崩溃或获得极大的延迟。我的解决方案允许在设备进入睡眠状态后自动定向,然后在设备进入Landscape后再次禁用它。当设备处于纵向状态时,我会隐藏所有内容。仅供参考,我还没有测试所有这些代码,所以它可能遗漏了一些东西。

代码语言:javascript
复制
//Before the device goes to sleep, enable auto-orientation
NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, handleDeactivate, false, 0, true);
function handleDeactivate(e:Event):void
{
    stage.autoOrients = true;

    //listen for the device to re-activate
    e.currentTarget.addEventListener(Event.ACTIVATE, handleActivate, false, 0, true);
}

//Once the device is re-activated, check the orientation.
function handleActivate(e:Event):void
{
    e.currentTarget.removeEventListener(Event.ACTIVATE, handleActivate, false, 0, true);

    //if the orientation is portait, just listen for an orientation change
    if (stage.stageHeight > stage.stageWidth)
    {
        //It makes sense that you would just use stage.setAspectRatio(StageAspectRatio.LANDSCAPE) here,
        //however in my experience I've found that setting the aspect ratio here seems to cause an infinite loop of the device attempting to reset the orientation.
        //Instead, I will wait for the user to change orientation, and then lock it in landscape
        stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, onOrientationChange);
    }
    else
    {
        disableAutoOrientation();
    }
}

//Check if the new orientation is landscape. If so, disable orientation changes.
function onOrientationChange():void
{
    if (stage.stageWidth > stage.stageHeight)
    {
        stage.removeEventListener(StageOrientationEvent.ORIENTATION_CHANGE, onOrientationChange);
        disableAutoOrientation();
    }
}

//disable the auto-orientation feature
function disableAutoOrientation():void
{
    stage.autoOrients = false;
}
票数 2
EN

Stack Overflow用户

发布于 2012-07-16 05:55:41

我也遇到了同样的问题,这是我在这个问题上的信息。

据我所知,原因是锁屏是覆盖在主屏幕上的,所以为了显示锁屏,显示器和你的应用程序一起被激活(它接收到“激活”事件并开始运行)。如果设备在锁定屏幕上默认为纵向(手机大多是这样,平板电脑大多不是),那么您的应用程序就会被拖着使用,而不管它的喜好和空中旅客的意愿。

因此,当你的应用程序最终到达前台(用户解锁屏幕)时,它是面向肖像的。解决方法是在收到激活事件时手动设置所需的方向。在ICS上有一个额外的怪癖-解锁后系统通知栏重新出现(不再全屏),重新设置全屏阶段没有任何效果。这就是我所能做到的。如果你能找到解决方案,我将不胜感激。

一个相关的问题是,当显示锁定屏幕时,你的游戏开始在下面运行,这是不好的情况,例如,这是一个动作游戏,而你在需要立即输入的东西中间停了下来(比如,游戏中的任何地方:-)。很想找到一个解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11133498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档