Блокировка ориентации Android на основе предпочтений - PullRequest
0 голосов
/ 30 июня 2019

Нет, не регургитация старого вопроса, пожалуйста, потерпите меня.Я не хочу избегать воссоздания активности в целом (без android:configChanges в манифесте), я не хочу навсегда исправлять свою ориентацию (без android:screenOrientation в манифесте) только потому, что мне лень внедрять сохранение экземпляра.

У меня есть приложение с тремя возможными настройками, которые пользователь может сделать: 1. автоматически изменяющий макет по ориентации, как обычно, 2. фиксированный портрет, 3. фиксированный пейзаж.В моем случае это имеет смысл, потому что книжные и альбомные дисплеи показывают различную функциональность, и пользователь может хочет ограничиться одним.Не обязательно, но есть возможность.

Приложение работает просто отлично.Я читаю настройку предпочтения в onCreate и вызываю setRequestedOrientation, если нахожусь в одном из фиксированных режимов.Я позволяю системе обрабатывать изменения ориентации, я не прошу обрабатывать изменения самостоятельно.

Единственная проблема с производительностью заключается в том, что, например, когда приложение запускается в портретном положении устройства, но фиксируется в альбомной ориентации, onCreate будет вызываться дважды, один раз для первоначального запуска, один раз для setRequestedOrientation.Это работает безупречно, я справляюсь с этим отлично, но есть снижение производительности, активность появляется с явной задержкой.(С фиксированным в манифесте screenOrientation, только для целей тестирования, запуск выглядит намного лучше, всего один вызов onCreate).

Итак, я ищувид кода, эквивалентный настройке манифеста screenOrientation.Я не могу и не хочу указывать его в манифесте, но вызов его из onCreate уже немного запаздывает с производительностью.

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

ты пробовал это?

<activity
        android:name=".YourActivity"
        android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout|uiMode" />

Эта строка configChanges в файле манифеста должна исключать повторный вызов метода onCreate:)

0 голосов
/ 01 июля 2019

Попробуйте прочитать предпочтения пользователей в Класс приложения и в onCreate setContentView на основе этого значения.

public class MyApp extends Application{
  public void onCreate(){
   // get user preference here in a global variable
   }
}

Установите это как класс приложения в манифесте.

Затем в ваших действиях onCreate используйте это значение для определения макета до setContentView ().

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