Android не берет файл макета в res / layout-land

1

В файле My Manifest.xml, если у меня есть следующий "android: configChanges" для MyActivity, он не забирает мой файл макета в res/layout-land при повороте моего телефона в альбомный режим.

    <activity
        android:name="MyActivity"
        android:configChanges="orientation|keyboard|keyboardHidden">
    </activity>

Не могли бы вы рассказать мне, как я могу это исправить?

Спасибо.

  • 0
    Разместите свой полный файл манифеста ...
Теги:

3 ответа

3
Лучший ответ

Включая ориентацию в configChanges, вы отключите поведение изменения макета по умолчанию, которое должно возобновить вашу активность в новой ориентации.

Вам нужно будет вручную изменить макет, используемый при получении CONFIGURATION_LANDSCAPE/CONFIGURATION_PORTRAIT в onConfigurationChanged.

Обратите внимание, что в соответствии с активными документами onConfigurationChanged является "последним средством" - обычно лучше сохранять состояние и позволять системе повторно - Запустите приложение.

С наилучшими пожеланиями,

Фил Лелло

4

Не зная остальной части манифеста или вашей активности, все, что я могу сказать, удаляет "ориентацию" из android: configChanges. Это отключает изменение ориентации.

2

Я понимаю, что хочу перебирать лучшие практики, но эти ответы не обязательно решают проблему. Я также согласен с этими передовыми методами. К сожалению, во всех случаях они не могут практиковаться.

Я бы подумал, что ОП заявила, что проблема будет ошибкой в ​​Android. говоря, что я буду обрабатывать "configChanges" в этом упражнении для Android, означает, что если изменения конфигурации не будут убивать мою активность. Использование слова "changes" не означает, что начальная конфигурация, переданная Activity, будет игнорироваться Activity. Либо словоблудие должно быть изменено, либо действие должно обрабатывать правильную ориентацию в исходной конфигурации.

Обходной путь заключается в том, чтобы вручную выбрать правильный файл макета, проверив ориентацию вручную. По существу, не используйте ведерки -land в конфигурации с configChanges = "ориентация | клавиатура | клавиатура", земные ковши будут проигнорированы.

// done in onCreate
int desiredLayoutId;
int orientation = getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
    desiredLayoutId = R.layout.some_layout_landscape;
} else {
    desiredLayoutId = R.layout.some_layout_portrait;
}
setContentView(desiredLayoutId);

Опять же, мне это не нравится, но если вы находитесь в "последней инстанции" и решили управлять своей собственной ориентацией, вы можете следить за кодом, который я предоставил, чтобы получить правильный файл макета. Одним из возможных вариантов использования может быть создание активности с потоковым видео, которое не должно выгружаться и перезагружаться при повороте экрана.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню