Подтвердить что ты не робот

Xml не переключается при изменении ориентации устройства


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

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

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

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

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

Я что-то пропустил? Какие изменения мне нужно сделать здесь?
Благодарю вас.

4b9b3361

Ответ 1

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

android:configChanges="orientation|screenSize"

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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);
        }            
    }
}