情况如下:
我有一个简单的活动,可以在方向更改期间更改其内容。
我希望能够在响应某些按钮点击时强制相反的方向(横向 - >纵向,纵向 - >横向),并在此之后仍然处理方向更改。
我会尝试用一个具体的例子(我希望完成)来解释自己 -
假设设备处于纵向模式 - >所以活动以纵向模式开始
现在用户点击某个按钮,该按钮会强制活动处于横向模式
现在,用户将设备旋转到横向模式,但活动不会发生任何事情,因为活动已被强制为横向模式。
现在,用户将设备旋转回纵向模式,活动再次变为纵向模式。
所以,这就是我如何强制定位:
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)时, 活动正在变回当前的设备方向 - 这会导致力方向无法正常工作。
知道如何解决这个问题吗?
提前感谢!
答案 0 :(得分:0)
每次单击按钮时都可能调用onConfigurationChanged()
我认为因为您确实更改了配置,所以即使您将其设置为横向或纵向,它也会回到未指定状态!试着放setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
在onCreate()
或其他什么,我认为这可以解决你的问题?
点击按钮 - >方向已更改,表示配置已更改 - >触发器onConfigurationChanged()
- >将其再次更改为UNSPECIFIED
。
如果你把它放在onCreate()
中,它只会在你启动应用程序时发生一次。