Как сохранить экран в альбомном режиме на Android
У меня есть активность, которая всегда должна отображаться в Пейзажном режиме. Поэтому я добавил android:screenOrientation="landscape"
.
Но проблема в том, что я поворачиваю устройство на 180 градусов, дисплей инвертируется. есть ли способ справиться с этой проблемой, так что элементы экрана всегда отображаются правильно.?
Ответы
Ответ 1
Так что для каждой информации это то, что я сделал.
- В Android манифест добавлен андроид: screenOrientation = "пейзаж".
- В методе возобновления добавьте эти строки кода
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getRotation();
if(orientation==Surface.ROTATION_180)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
Таким образом, мой экран всегда правильно позиционируется, даже если пользователь держит устройство с ног на голову.
Ответ 2
На самом деле вы действительно хотите указать:
android:screenOrientation="sensorLandscape"
в вашем AndroidManifest.xml. Это будет прослушивать данные датчика при привязке между ландшафтом и reverseLandscape.
Ответ 3
Другие упомянули sensorLandscape
... чтобы сделать это программно в вашей деятельности (или базовом действии), вы можете установить свою ориентацию на это:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
Я делаю это в onResume()
. Это будет учитывать пейзаж и обратный пейзаж, когда вы переворачиваете устройство на 180 градусов в середине действия, не используя onConfigurationChanged()
.
Это было полезно для меня, поскольку для планшетов мне нужен только ландшафтный/ландшафтный реверс, а для телефонов мне нужен только портрет/портретный реверс, и я не хочу делать два отдельных файла AndroidManifest. ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT
также существует.
Ответ 4
В манифесте Android напишите это:
android:configChanges="orientation"
android:screenOrientation="landscape"
как в примере ниже.
<activity android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="orientation"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Ответ 5
Хммм. Это немного зависит от используемой версии фреймворка. Попробуйте это начать:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Если это отлично работает. Если вам не нужно рассказывать нам немного о макете вашего приложения.
Ответ 6
Хорошим методом является использование
setRequestedOrientation(6);
6 - значение для sensorLandscape, но кажется, что для него нет определенной константы.