禁用方向但检测方向
问题描述:
我有一个活动。此活动适用于纵向模式或横向模式。在横向模式下,我加载一个新的布局来显示图形。 即可检测姿态,我成立这个在我的清单:禁用方向但检测方向
android:screenOrientation="sensor" android:configChanges="orientation"
它完美,因为当我翻我的手机,新的布局被加载。但是,在lanscape模式下,用户可以使用按钮(它是一个切换器)禁用/启用旋转。
我写了这个代码:
public void onConfigurationChanged(Configuration pNewConfig) {
Log.v(DEBUG_TAG, "Current configuration changes");
if (pNewConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Log.v(DEBUG_TAG, "Screen orientation : LANDSCAPE");
if (pNewConfig.orientation != mCurrentOrientation) {
initTestLandscape();
mCurrentOrientation = pNewConfig.orientation;
}
} else {
Log.v(DEBUG_TAG, "Screen orientation : PORTRAIT");
if (!mIsLandscapeLocking
&& pNewConfig.orientation != mCurrentOrientation) {
initTestPortrait();
mCurrentOrientation = pNewConfig.orientation;
}
}
super.onConfigurationChanged(pNewConfig);
}
此代码的工作,但是当用户在横向模式和翻转手机早在肖像模式和锁开启时,lanscape布局在纵向模式下翻转我不想那样!
我添加
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
但是这个代码禁用onConfigurationChanged方法,如果用户再次翻转手机,我无法检测...
你能帮助我吗?
答
使Android的变化:configChanges: -
android:configChanges="orientation|screenSize|keyboard|keyboardHidden"
更改后,你的代码应该是工作
这是非常简单的。我叫setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);当用户锁定视图并调用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR)时;当用户解锁...这很容易,我怎么没有想到这个解决方案?不便之处,敬请谅解。 (我无法回答我的问题) – FinalSpirit
值得注意的是,如果用户在视图旋转到右侧而不是左侧时锁定了自己的解决方案,那么该解决方案仍然会出现异常。该视图会翻转,因为您正在锁定“SCREEN_ORIENTATION_LANDSCAPE”,这只意味着一方面。您可能需要'SCREEN_ORIENTATION_SENSOR_LANDSCAPE'将其保持在横向模式中,但如果用户切换到手机/平板电脑的另一侧,它仍会监听设备中的传感器。 – SDJMcHattie
是的,您必须使用SCREEN_ORIENTATION_SENSOR_LANDSCAPE来代替SCREEN_ORIENTATION_LANDSCAPE,但是当我发布此主题时,我在Android 8上不支持SCREEN_ORIENTATION_SENSOR_LANDSCAPE – FinalSpirit