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" />
Я что-то пропустил? Какие изменения мне нужно сделать здесь?
Благодарю вас.
Ответы
Ответ 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);
}
}
}