Android - проблема ориентации экрана - нужен только портрет - PullRequest
0 голосов
/ 04 июля 2018

Моя проблема: я хочу, чтобы мое приложение запускалось только в портретном режиме. Для этого я должен определить «android:screenOrientation=portrait» в файле «AndroidManifest» для каждого действия. Я не хочу определять эту строку для каждого вида деятельности. Поэтому я предложил другое решение, например, создание подкласса 'Application' и регистрация activity's life cycle, а в методе "onActivityCreated" я добавил строку

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

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

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вы можете добиться этого для всего приложения, следуя простому способу. Это устранит накладные расходы на расширение общего базового класса, а также объявление манифеста в каждом действии для Portrait.

Для этого ваше приложение должно иметь класс приложения. В его onCreate (), когда ваше приложение запускается в первый раз, вам необходимо зарегистрировать объект ActivityLifecycleCallbacks (уровень API 14+), чтобы получать уведомления о событиях жизненного цикла активности.

Вышеупомянутый обратный вызов дает вам возможность выполнить свой собственный код всякий раз, когда какое-либо действие запускается (или останавливается, или возобновляется, или что-то еще). Вы можете использовать это для setRequestedOrientation () для вновь созданного действия.

class DummyApp extends Application {

@Override
public void onCreate() {
    super.onCreate();  

    // Register Callback
    registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

            activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        }
        // Other method of the ActivityLifecycleCallbacks as well you need to over-ride.
    });

  }
}
0 голосов
/ 04 июля 2018

Каждое действие запускается 2 раза, потому что оно сначала загружается в ландшафтном режиме, вызывает onCreate () и вращается снова, когда выполняет строку поворота экрана с кодом

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Единственный способ обойти это - указать screenOrientation = "Portrait" для каждого действия в манифесте. Это только способ, которым вы начинаете создавать действие в портретном режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...