Android: поворот экрана в Activity не переключает книжную / альбомную ориентацию - PullRequest
5 голосов
/ 23 июля 2010

Я создаю свое Android-приложение и хочу добавить макеты для разных ориентаций.Я создал папку layout-land и поместил другой макет для моего первого начального действия «myStartActivity» (с тем же именем, что и макет, который я использовал ранее для обеих ориентаций).

В зависимости от ориентации экрана ДОя запускаю приложение, выбирается правильный макет: «myLayout.xml» из папки «layout», когда я начинаю в портретном режиме, и «myLayout.xml» из папки «layout-land», когда я начинаю в альбомной ориентации..

Проблема в том, что, когда я поворачиваю устройство, когда я уже в Activity, после поворота я не получаю новый макет.Например: при повороте из портретной в альбомную ориентацию все еще отображается «myLayout.xml» из папки «layout», а не из папки «layout-land», как следует.

Я не перезаписывал никакие методы OnConfigurationChangeили что-нибудь.Все, что я делаю в "myStartActivity", это создаю экземпляры некоторых кнопок и предоставляю им несколько слушателей.Я хочу использовать другой макет в альбомной ориентации, чтобы изменить порядок кнопок.

Ответы [ 3 ]

3 голосов
/ 12 сентября 2011

В моем случае описанная проблема возникает только тогда, когда у меня есть Android: configChanges = "direction" в деятельности в манифесте.

В противном случае правильное расположение автоматически используется при вращении.

0 голосов
/ 26 октября 2011

Если вы тестируете только на эмуляторе, могут быть проблемы с обнаружением изменения ориентации. Я испытал это по крайней мере.

0 голосов
/ 17 марта 2011

Что вы можете сделать, это использовать Activity.getResources (). GetConfiguration (). Ориентация

Затем, в зависимости от результата ориентации, установите представление содержимого в вашем методе oncreate (), которыйвызывается при вращении.

protected void onCreate(Bundle savedInstanceState) {
int result = this.getResources().getConfiguration().orientation;
if (result == 1){
//set content view to portrait
setContentView(R.layout.portrait);
}
else{
//set content view to landscape} 
setContentView(R.layout.landscape);
}

Или вставьте регистр:)

...