Страницы

Поиск по вопросам

суббота, 4 января 2020 г.

Как запретить смену ориентации экрана программно?

#java #android


Проведя пальцем по экрану сверху вниз, мы попадаем вверху в меню с кнопками. Например:
звук (изменить звук), поворот экрана (разрешаем или запрещаем поворот экрана) и т.д.



А можно ли программно нажать на кнопку "Поворот экрана", а именно: запретить поворот
экрана?

Иными словами: как программно запретить поворот, а по завершении программы вернуть
в положение перед запуском.
Т.е. если перед запуском был ландшафт, то он и останется им до конца работы приложения,
а если был портрет, то он тоже останется до конца работы приложения?

Вариант с android:screenOrientation="portrait" в Манифесте
не предлагать.
Он не решает данную проблему!

Благодарю, заранее...
    


Ответы

Ответ 1



Ответы с en-SO раз и два Получаем два варианта: ландшафт и портрет int orientation=this.getResources().getConfiguration().orientation; if(orientation==Configuration.ORIENTATION_PORTRAIT){ //портрет } else{ //ландшафт } Получаем 4 варианта с углами поворота относительно дефолтного значения int rotation = getWindowManager().getDefaultDisplay().getRotation(); int angle = 0; switch (rotation) { case Surface.ROTATION_90: angle = -90; break; case Surface.ROTATION_180: angle = 180; break; case Surface.ROTATION_270: angle = 90; break; default: angle = 0; break; } Теперь устанавливайте полученную ориентацию: setRequestedOrientation(/* сюда поместите одно из значений констант класса ActivityInfo */);

Ответ 2



Вот что нашёл в документации, и это работает: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); Разблокровать: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_USER);

Ответ 3



Все с того же en-SO: public class LockOrientation { Activity activity; public LockOrientation(Activity act) { this.activity = act; } @SuppressLint("InlinedApi") public void lock() { switch (activity.getResources().getConfiguration().orientation) { case Configuration.ORIENTATION_PORTRAIT: if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.FROYO) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else { int rotation = activity.getWindowManager().getDefaultDisplay() .getRotation(); if (rotation == android.view.Surface.ROTATION_90 || rotation == android.view.Surface.ROTATION_180) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); } else { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } } break; case Configuration.ORIENTATION_LANDSCAPE: if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.FROYO) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else { int rotation = activity.getWindowManager().getDefaultDisplay() .getRotation(); if (rotation == android.view.Surface.ROTATION_0 || rotation == android.view.Surface.ROTATION_90) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); } } break; } } public void unlock() { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); } } Вызов: блокировка: new LockOrientation(this).lock(); разблокировка: new LockOrientation(this).unlock();

Комментариев нет:

Отправить комментарий