0

情况如下:

我有一个简单的 Activity,它会在方向更改期间更改其内容。

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

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

假设设备处于纵向模式 -> 因此活动以纵向模式开始。
现在用户单击某个按钮,这会迫使活动处于横向模式。
现在用户将设备旋转到横向模式,但活动不应发生任何事情,因为活动已被迫处于横向模式。
现在用户将设备旋转回纵向模式,并且活动再次进入纵向模式。

所以,这就是我强制定位的方式:

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) 时,活动正在更改回当前设备方向 - 这导致强制方向无法正常工作。

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

提前致谢!

4

1 回答 1

0

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

单击按钮--> 方向更改,意味着配置更改--> 触发器onConfigurationChanged()--> 再次更改UNSPECIFIED

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

于 2013-09-22T20:00:51.080 回答