2015-09-16 4 views
1

Я пытаюсь изменить ориентацию экрана на основе нажатия кнопки, а также прослушивать изменение конфигурации с датчика.setRequestedOrientation (...) блокирует изменение конфигурации от датчика

Мой код выглядит следующим образом:

private boolean mFullScreen = false; 
... 

/** 
* This method is used by button to toggle orientation 
*/ 
public void toggleFullScreen() { 
    mFullScreen = !mFullScreen; 
    switchFullScreen(); 
} 

private void switchFullScreen() { 
    if (mFullScreen) { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 
    } else { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); 
    } 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    switch (newConfig.orientation) { 
     case Configuration.ORIENTATION_LANDSCAPE: { 
      getSupportActionBar().hide(); 
      getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      break; 
     } 
     case Configuration.ORIENTATION_PORTRAIT: { 
      getSupportActionBar().show(); 
      getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      break; 
     } 
    } 
} 

И в манифесте:

<activity 
    android:name="Activity" 
    android:configChanges="screenSize|orientation /> 

Сначала изменение конфигурации от датчика обнаруживается, но как только ориентация переключается с помощью кнопки, он не обнаружен ,

ответ

0

Только с ActivityInfo.SCREEN_ORIENTATION_SENSOR и ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR ваша деятельность будет реагировать на датчик. Настройка вашей ориентации экрана в портретном или ландшафтном блокирует вращение, это их главная цель

+1

На самом деле я пытался получить игрока, как у YouTube, где оба датчика и кнопки может использоваться для изменения ориентации. – Samir

0

Вы можете сделать что-то вроде этого:

private void switchFullScreen() { 
    if (mFullScreen) { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 
    } else { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); 
    } 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
} 
Смежные вопросы