XML не переключается при изменении ориентации устройства - PullRequest
20 голосов
/ 28 декабря 2010


Я сделал две папки, res/layout и res/layout-land

Вывод, который я получил
Если я запускаю приложение в режиме portrait, оно всегда будет использовать xml в папке layout, если приложение работает в режиме portrait. И не будет использовать XML в layout-land, если я переключу устройство на landscape mode
Если он запускается в режиме landscape, он использует только xml в layout-land
xml не переключается при изменении ориентации

То, что я ожидал, было
Он должен использовать xml в папке layout, когда он находится в портретном режиме, и использовать xml в layout-land, когда он находится в ландшафтном режиме

.

В файле манифеста я добавил android:configChanges="orientation" для активности и

<supports-screens 
        android:resizeable="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:anyDensity="true" />

Я что-то здесь пропустил? Какие изменения мне нужно сделать здесь?
Спасибо

Ответы [ 4 ]

38 голосов
/ 28 декабря 2010

Код манифеста

android:configChanges="orientation|screenSize"

игнорирует XML в "layout-land" и использует тот, что в папке "layout". Если вы создаете другой XML для ландшафта , не используйте тег android:configChanges="orientation|screenSize" для этого действия.

22 голосов
/ 18 января 2011

android: configChanges = "direction" останавливает перезапуск активности, а также перезагрузку макета xml (обычно это делается в onCreate).Вместо этого вызывается onConfigurationChanged (newConfig).Таким образом, вы можете сделать:

@Override
    public void onConfigurationChanged(Configuration newConfig){
        super.onConfigurationChanged(newConfig);
        setContentView(R.layout.<xml file>);
    }

Это перезагрузит макет из каталога layout-land, если он доступен.Примечание: вам также нужно будет связать действия с кнопками и тому подобным

2 голосов
/ 21 июля 2013

Не забудьте включить опцию Settings -> Display -> Auto-rotate screen.

2 голосов
/ 19 октября 2012
private void setContentBasedOnLayout()
{
    WindowManager winMan = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);

    if (winMan != null)
    {
        int orientation = winMan.getDefaultDisplay().getOrientation();

        if (orientation == 0) {
            // Portrait
            setContentView(R.layout.alertdialogportrait);
        }
        else if (orientation == 1) {
            // Landscape
            setContentView(R.layout.alertdialoglandscape);
        }            
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...