#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();
Комментариев нет:
Отправить комментарий