Ответ 1
Activity.getResources().getConfiguration().orientation
Я просто хочу установить несколько флагов, когда моя ориентация находится в ландшафте, так что когда активность воссоздается в onCreate(), я могу переключаться между тем, что нужно загружать в портрете или пейзаже. У меня уже есть xml, который обрабатывает мой макет.
public void onConfigurationChanged(Configuration _newConfig) {
if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
this.loadURLData = false;
}
if (_newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
this.loadURLData = true;
}
super.onConfigurationChanged(_newConfig);
}
Over-riding onConfigurationChanged предотвратит загрузку xml-страницы в альбомной ориентации.
Я просто хочу получить текущую ориентацию своего устройства в onCreate(). Как я могу получить это?
Activity.getResources().getConfiguration().orientation
int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
// code for portrait mode
} else {
// code for landscape mode
}
Когда суперкласс this
Context
В некоторых устройствах void onConfigurationChanged()
может произойти сбой. Пользователь будет использовать этот код для получения текущей ориентации экрана.
public int getScreenOrientation()
{
Display getOrient = getActivity().getWindowManager().getDefaultDisplay();
int orientation = Configuration.ORIENTATION_UNDEFINED;
if(getOrient.getWidth()==getOrient.getHeight()){
orientation = Configuration.ORIENTATION_SQUARE;
} else{
if(getOrient.getWidth() < getOrient.getHeight()){
orientation = Configuration.ORIENTATION_PORTRAIT;
}else {
orientation = Configuration.ORIENTATION_LANDSCAPE;
}
}
return orientation;
}
И используйте
if (orientation==1) // 1 for Configuration.ORIENTATION_PORTRAIT
{ // 2 for Configuration.ORIENTATION_LANDSCAPE
//your code // 0 for Configuration.ORIENTATION_SQUARE
}
int rotation = getWindowManager().getDefaultDisplay().getRotation();
, это даст всю ориентацию, как обычный и обратный
и обрабатывать его как
int angle = 0;
switch (rotation) {
case Surface.ROTATION_90:
angle = -90;
break;
case Surface.ROTATION_180:
angle = 180;
break;
case Surface.ROTATION_270:
angle = 90;
break;
default:
angle = 0;
break;
}
getActivity().getResources().getConfiguration().orientation
эта команда возвращает значение int 1 для Portrait и 2 для Landscape
Если кто-то хочет получить содержательное описание ориентации (например, переданное onConfigurationChanged(..)
с этими reverseLandscape
, sensorLandscape
и т.д.), просто используйте getRequestedOrientation()
В вашем классе активности используйте следующий метод:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
setlogo();// Your Method
Log.d("Daiya", "ORIENTATION_LANDSCAPE");
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
setlogoForLandScape();// Your Method
Log.d("Daiya", "ORIENTATION_PORTRAIT");
}
}
Затем, чтобы объявить, что ваша активность обрабатывает изменение конфигурации, отредактируйте соответствующий элемент в файле манифеста, чтобы включить атрибут android:configChanges
со значением, представляющим конфигурацию, которую вы хотите обработать. Возможные значения перечислены в документации для атрибута android:configChanges
(наиболее часто используемые значения - это "ориентация", чтобы предотвратить перезагрузку при изменении ориентации экрана и "клавиатура", чтобы предотвратить перезагрузку при изменении доступности клавиатуры). Вы можете объявить несколько значений конфигурации в атрибуте, разделив их на канал | характер.
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
Что все!!
если вы хотите переопределить этот метод onConfigurationChanged и все еще хотите, чтобы он выполнял базовый материал, тогда рассмотрите возможность использования super.onConfigyrationChanged() в качестве первого выражения в методе overriden.
Я просто хочу предложить другую альтернативу, которая затронет некоторых из вас:
android:configChanges="orientation|keyboardHidden"
подразумевает, что мы явно объявляем макет для внедрения.
В случае, если мы хотим сохранить автоматический впрыск благодаря папкам layout-land и layout. Все, что вам нужно сделать, это добавить его в onCreate:
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
getSupportActionBar().hide();
} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
getSupportActionBar().show();
}
Здесь мы показываем или нет панель действий в зависимости от ориентации телефона