Моя проблема:
Для некоторых требований мне нужны два разных макета xml для моей деятельности:
- Один для ландшафтного режима.
- И еще один для режима Горизонтально-обратный (перевернутый или перевернутый).
К сожалению, Android не позволяет создавать отдельные макеты для альбомной ориентации и реверса (как мы можем сделать для портретной и альбомной ориентации с layout-land
и layout-port
).
AFAIK, единственный способ - изменить Activity-xml из java-кода.
Что я пробовал:
1) Переопределите метод onConfigurationChanged()
для обнаружения изменений ориентации, но я не могу понять, является ли он альбомным или альбомным-обратным:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Log.d("TEST","Landscape");
}
}
(С android:configChanges="keyboardHidden|orientation|screenSize|layoutDirection"
в моем теге активности в манифесте)
2) Используйте OrientationEventListener
с SENSOR_DELAY_NORMAL
, как предлагается в этом ответе, но ориентация устройства изменяется перед вводом моих блоков if
, поэтому я получаю отложенное обновление представления:
mOrientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL){
@Override
public void onOrientationChanged(int orientation) {
if (orientation==0){
Log.e("TEST", "orientation-Portrait = "+orientation);
} else if (orientation==90){
Log.e("TEST", "orientation-Landscape = "+orientation);
} else if(orientation==180){
Log.e("TEST", "orientation-Portrait-rev = "+orientation);
}else if (orientation==270){
Log.e("TEST", "orientation-Landscape-rev = "+orientation);
} else if (orientation==360){
Log.e("TEST", "orientation-Portrait= "+orientation);
}
}};
Мой вопрос:
Есть ли лучшее решение для изменения макета деятельности между ориентацией "Landscape"
и "Landscape-reverse"
?
Любые предложения приветствуются.