强制定位,同时保持设备方向的变化?

时间:2013-09-22 19:53:27

标签: android orientation landscape portrait

情况如下:

我有一个简单的活动,可以在方向更改期间更改其内容。

我希望能够在响应某些按钮点击时强制相反的方向(横向 - >纵向,纵向 - >横向),并在此之后仍然处理方向更改。

我会尝试用一个具体的例子(我希望完成)来解释自己 -

假设设备处于纵向模式 - >所以活动以纵向模式开始 现在用户点击某个按钮,该按钮会强制活动处于横向模式 现在,用户将设备旋转到横向模式,但活动不会发生任何事情,因为活动已被强制为横向模式。
现在,用户将设备旋转回纵向模式,活动再次变为纵向模式。

所以,这就是我如何强制定位:

public void onButtonClick()
{
    if (mLastOrientation == Configuration.ORIENTATION_LANDSCAPE)
    {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
    }

    else
    {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }
}

这是方向变更处理:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);

    int currentOrientation = newConfig.orientation;

    //
    // Some UI changes according to orientation .............
    //

    mLastOrientation = currentOrientation;


    // Here's where I'm allowing device orientation changes again
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}

问题在于,当我调用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)时, 活动正在变回当前的设备方向 - 这会导致力方向无法正常工作。

知道如何解决这个问题吗?

提前感谢!

1 个答案:

答案 0 :(得分:0)

每次单击按钮时都可能调用onConfigurationChanged()我认为因为您确实更改了配置,所以即使您将其设置为横向或纵向,它也会回到未指定状态!试着放setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);onCreate()或其他什么,我认为这可以解决你的问题?

点击按钮 - >方向已更改,表示配置已更改 - >触发器onConfigurationChanged() - >将其再次更改为UNSPECIFIED

如果你把它放在onCreate()中,它只会在你启动应用程序时发生一次。