2011-08-21 62 views
5

我有一个活动。此活动适用于纵向模式或横向模式。在横向模式下,我加载一个新的布局来显示图形。 即可检测姿态,我成立这个在我的清单:禁用方向但检测方向

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方法,如果用户再次翻转手机,我无法检测...

你能帮助我吗?

+4

这是非常简单的。我叫setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);当用户锁定视图并调用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR)时;当用户解锁...这很容易,我怎么没有想到这个解决方案?不便之处,敬请谅解。 (我无法回答我的问题) – FinalSpirit

+0

值得注意的是,如果用户在视图旋转到右侧而不是左侧时锁定了自己的解决方案,那么该解决方案仍然会出现异常。该视图会翻转,因为您正在锁定“SCREEN_ORIENTATION_LANDSCAPE”,这只意味着一方面。您可能需要'SCREEN_ORIENTATION_SENSOR_LANDSCAPE'将其保持在横向模式中,但如果用户切换到手机/平板电脑的另一侧,它仍会监听设备中的传感器。 – SDJMcHattie

+0

是的,您必须使用SCREEN_ORIENTATION_SENSOR_LANDSCAPE来代替SCREEN_ORIENTATION_LANDSCAPE,但是当我发布此主题时,我在Android 8上不支持SCREEN_ORIENTATION_SENSOR_LANDSCAPE – FinalSpirit

回答

0

使Android的变化:configChanges: -

android:configChanges="orientation|screenSize|keyboard|keyboardHidden" 

更改后,你的代码应该是工作