Я хочу иметь 2 разных режима ориентации в зависимости от устройства: если экран устройства очень большой, ориентация должна быть ЛАНДШАФТ, а если экран устройства меньше, ориентация должна быть ПОРТРЕТ.
Я сделал следующую проверку:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Set orientation for tablets and phones
if (isXLarge()) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
setContentView(R.layout.activity_main);
}
Запись манифеста для действия:
<activity
android:configChanges="keyboardHidden"
android:launchMode="singleTop"
android:theme="@android:style/Theme.NoTitleBar"
android:name=".MyActivity"/>
Он отлично работает на мобильных телефонах, однако на планшетах Motorola Xoom с Android 3.2 работает некорректно.
Если предположить, что планшет физически удерживается в портретном режиме, происходит следующая последовательность действий:
- Активность создается и отображается в портретном режиме — это отображается визуально в течение полсекунды.
- Активность уничтожается и воссоздается в ландшафтном режиме.
Проблема в том, что всегда есть средний переход в той ориентации, в которой планшет физически удерживается в данный момент, и после этого активность воссоздается с нужной ориентацией.
Спасибо за любую информацию или совет о проблеме и, пожалуйста, сообщите мне, если вам нужна дополнительная информация.
Метод isXLarge() правильно возвращает тип отображения