Как я могу поворачивать отображение только в ландшафтном режиме в android?
Я хочу, чтобы мой вид вращался только в альбомном режиме, по часовой стрелке и против часовой стрелки.
Я читал о единственном против часовой стрелки для android < 2.2, и это не проблема, мое приложение будет +2.2 на данный момент.
Я изменяю свой манифест, чтобы улавливать изменения конфигурации
android:configChanges="keyboardHidden|orientation"
Я переопределяю свою активность, чтобы улавливать изменения конфигурации
@Override
public void onConfigurationChanged(Configuration newConfig) {
и я знаю, как улавливать ориентацию
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int rot = display.getRotation();
но... Я не знаю, как вызвать подходящую ландшафтную ориентацию, я делаю это:
if (rot == Surface.ROTATION_90 || rot == Surface.ROTATION_270){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
но всегда поворачивайте его против часовой стрелки: - (
Как установить левую и правую ориентацию ландшафта?
ИЗМЕНИТЬ
Если я устанавливаю ориентацию в манифесте:
Android: screenOrientation = "пейзаж"
Макет активности всегда находится в "левом ландшафте", и я хочу изменить левый и правый ландшафты: S
Ответы
Ответ 1
Если вы создаете приложение для Android 2.3 и новее, вы должны установить атрибут манифеста как
Android: screenOrientation = "sensorLandscape"
и ваше приложение будет поворачиваться в любом (левом или правом) ландшафтном положении.
Если вы создаете свое приложение для Android 2.2 и старше, но хотите запустить его на Android 2.3 и новее в качестве конфигурации "sensorLandscape", вы можете попробовать что-то вроде этого
public static final int ANDROID_BUILD_GINGERBREAD = 9;
public static final int SCREEN_ORIENTATION_SENSOR_LANDSCAPE = 6;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= ANDROID_BUILD_GINGERBREAD) {
setRequestedOrientation(SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
...
Это был лучший способ справиться с изменениями ландшафтной ориентации в моем случае. Мне не удалось найти лучший способ повернуть экран влево или вправо на ориентацию ландшафта для Android 2.2 и старше.
Я пробовал считывать ориентации сенсоров и устанавливать на них ландшафтное положение, но мне кажется, что как только вы назовете "setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)"; датчик отключается (для вашего приложения/активности), и вы не можете прочитать ориентацию через датчик.
Кстати, вам действительно не нужно переопределять "onConfigurationChanged (Конфигурация newConfig)", чтобы все было нормально работать.
Ответ 2
В объявлении активности манифеста вместо
android:screenOrientation = "landscape"
использование
android:screenOrientation = "sensorLandscape"
Ответ 3
Вы пытались добавить это в свой манифест внутри тега активности, чтобы узнать, обрабатывает ли он его автоматически?
android:screenOrientation = "landscape"
Ответ 4
AndroidManifest.xml → Приложение → выбрал вашу активность → Ориентация экрана = пейзаж.