Подтвердить что ты не робот

Как я могу поворачивать отображение только в ландшафтном режиме в android?

Я хочу, чтобы мой вид вращался только в альбомном режиме, по часовой стрелке и против часовой стрелки.

Я читал о единственном против часовой стрелки для android < 2.2, и это не проблема, мое приложение будет +2.2 на данный момент.

Я изменяю свой манифест, чтобы улавливать изменения конфигурации

android:configChanges="keyboardHidden|orientation"

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

@Override
public void onConfigurationChanged(Configuration newConfig) {

и я знаю, как улавливать ориентацию

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int rot = display.getRotation();

но... Я не знаю, как вызвать подходящую ландшафтную ориентацию, я делаю это:

if (rot == Surface.ROTATION_90 || rot == Surface.ROTATION_270){
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}

но всегда поворачивайте его против часовой стрелки: - (

Как установить левую и правую ориентацию ландшафта?

ИЗМЕНИТЬ

Если я устанавливаю ориентацию в манифесте:

Android: screenOrientation = "пейзаж"

Макет активности всегда находится в "левом ландшафте", и я хочу изменить левый и правый ландшафты: S

4b9b3361

Ответ 1

Если вы создаете приложение для Android 2.3 и новее, вы должны установить атрибут манифеста как

Android: screenOrientation = "sensorLandscape"

и ваше приложение будет поворачиваться в любом (левом или правом) ландшафтном положении.

Если вы создаете свое приложение для Android 2.2 и старше, но хотите запустить его на Android 2.3 и новее в качестве конфигурации "sensorLandscape", вы можете попробовать что-то вроде этого

public static final int ANDROID_BUILD_GINGERBREAD = 9;
public static final int SCREEN_ORIENTATION_SENSOR_LANDSCAPE = 6;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT >= ANDROID_BUILD_GINGERBREAD) {
        setRequestedOrientation(SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }
...

Это был лучший способ справиться с изменениями ландшафтной ориентации в моем случае. Мне не удалось найти лучший способ повернуть экран влево или вправо на ориентацию ландшафта для Android 2.2 и старше. Я пробовал считывать ориентации сенсоров и устанавливать на них ландшафтное положение, но мне кажется, что как только вы назовете "setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)"; датчик отключается (для вашего приложения/активности), и вы не можете прочитать ориентацию через датчик.

Кстати, вам действительно не нужно переопределять "onConfigurationChanged (Конфигурация newConfig)", чтобы все было нормально работать.

Ответ 2

В объявлении активности манифеста вместо

android:screenOrientation = "landscape"

использование

android:screenOrientation = "sensorLandscape"

Ответ 3

Вы пытались добавить это в свой манифест внутри тега активности, чтобы узнать, обрабатывает ли он его автоматически?

android:screenOrientation = "landscape"

Ответ 4

AndroidManifest.xml → Приложение → выбрал вашу активность → Ориентация экрана = пейзаж.