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

Как сохранить экран в альбомном режиме на Android

У меня есть активность, которая всегда должна отображаться в Пейзажном режиме. Поэтому я добавил android:screenOrientation="landscape".

Но проблема в том, что я поворачиваю устройство на 180 градусов, дисплей инвертируется. есть ли способ справиться с этой проблемой, так что элементы экрана всегда отображаются правильно.?

4b9b3361

Ответ 1

Так что для каждой информации это то, что я сделал.

  • В Android манифест добавлен андроид: screenOrientation = "пейзаж".
  • В методе возобновления добавьте эти строки кода
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getRotation();

if(orientation==Surface.ROTATION_180)
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}

Таким образом, мой экран всегда правильно позиционируется, даже если пользователь держит устройство с ног на голову.

Ответ 2

На самом деле вы действительно хотите указать:

android:screenOrientation="sensorLandscape"

в вашем AndroidManifest.xml. Это будет прослушивать данные датчика при привязке между ландшафтом и reverseLandscape.

Ответ 3

Другие упомянули sensorLandscape... чтобы сделать это программно в вашей деятельности (или базовом действии), вы можете установить свою ориентацию на это:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);

Я делаю это в onResume(). Это будет учитывать пейзаж и обратный пейзаж, когда вы переворачиваете устройство на 180 градусов в середине действия, не используя onConfigurationChanged().

Это было полезно для меня, поскольку для планшетов мне нужен только ландшафтный/ландшафтный реверс, а для телефонов мне нужен только портрет/портретный реверс, и я не хочу делать два отдельных файла AndroidManifest. ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT также существует.

Ответ 4

В манифесте Android напишите это:

   android:configChanges="orientation"
              android:screenOrientation="landscape"

как в примере ниже.

 <activity android:name=".MainActivity"
              android:label="@string/app_name"
              android:configChanges="orientation"
              android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Ответ 5

Хммм. Это немного зависит от используемой версии фреймворка. Попробуйте это начать:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Если это отлично работает. Если вам не нужно рассказывать нам немного о макете вашего приложения.

Ответ 6

Хорошим методом является использование

setRequestedOrientation(6);

6 - значение для sensorLandscape, но кажется, что для него нет определенной константы.