Поэтому я хочу, чтобы мое приложение всегда привязывалось к естественной ориентации устройства. Так что, в основном, я хочу, чтобы поворот на 0 градусов Здесь есть getRotation()
метод:
http://developer.android.com/reference/android/view/Display.html
Однако, нет setRotation (int вращение), который принял бы один из Surface.ROTATION_X
параметров, найденных здесь:
http://developer.android.com/reference/android/view/Surface.html
Итак, есть ли способ сделать это с помощью одной строки кода, которая всегда будет работать? Или это должно быть сделано с некоторым кодом?
Единственное, что я могу рассматривать как ручное решение, это следующее, но у меня есть некоторые опасения по этому поводу.
Я могу использовать display.getRotation()
. Затем я проверю, 0 или 180 градусов, после этого я получу высоту и ширину дисплея и посмотрю, какой из них длиннее другого. Если окажется, что я нахожусь в ландшафтном режиме, то я буду знать, что естественная ориентация устройства - это альбомная ориентация, поэтому я могу установить его в альбомную ориентацию. Однако, если бы вращение было 270 или 90, то я знал бы, что естественная ориентация - портрет, и я мог бы установить его в портрет.
Однако меня беспокоит, где это сделать так, чтобы оно всегда работало. Допустим, пользователь поворачивает экран во время выполнения этого фрагмента кода, если устройство меняет ориентацию в промежутке времени, когда я использую метод getRotation()
, и сравниваю ширину с высотой с помощью некоторых операторов if, а что нет, я думаю это может скинуть все. Что произойдет, если я введу это в onCreate()
или onResume()
? Возможно ли, что вещи могут выйти из-под контроля?
Возможно ли прерывание onCreate()
или onResume()
из-за переориентации экрана из-за того, что пользователь повернул устройство? Другая проблема заключается в том, что если вы перевернете устройство на 180 градусов, активность никогда не будет нарушена, поэтому я думаю, что поведение в этой ситуации может быть очень большим, будь то поворот на 90 градусов или поворот на 180 градусов.