2010-09-08 3 views
144

Я просто хочу установить несколько флагов, когда моя ориентация в ландшафте, так что когда активность воссоздается в 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); 
    } 

Преобладающая onConfigurationChanged будет препятствовать мой макету земли XML от загрузки в альбомной ориентации.

Я просто хочу получить текущую ориентацию своего устройства в onCreate(). Как я могу это получить?

ответ

372
Activity.getResources().getConfiguration().orientation 
+8

Это дает только два значения ORIENTATION_PORTRAIT и ORIENTATION_LANDSCAPE. Есть ли способ получить все четыре значения из ActivityInfo? (Это также LANDSCAPE_REVERSE и PORTRAIT_REVERSE) – HRJ

+16

@HRJ вы можете использовать getWindowManager(). GetDefaultDisplay().getRotation() – MKJParekh

+18

getWindowManager(). getDefaultDisplay(). getRotation() возвращает поворот со ссылкой на «естественную» ориентацию дисплея, то есть для планшета он возвратит Surface.ROTATION_0 в альбомном режиме, тогда как для мобильного телефона он вернется такое же значение для портрета. –

25

В некоторых устройствах 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 
} 
+0

duplicate answer – Apurva

+1

Обратите внимание, что getOrient.getWidth() и getOrient.getHeight() устарели. – anivaler

+0

Должен быть отмечен как правильный ответ, как есть путь более подробно – Zapnologica

11
getActivity().getResources().getConfiguration().orientation 

эта команда возвращает INT значение 1 для портретной и 2 для ландшафта

5

В случае, если кто хотел бы получить meaningful описание ориентации (например, что передается onConfigurationChanged(..) с этими reverseLandscape, sensorLandscape и т. Д.), Просто используйте getRequestedOrientation()

17
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; 
} 
36
int orientation = this.getResources().getConfiguration().orientation; 
if (orientation == Configuration.ORIENTATION_PORTRAIT) { 
    //code for portrait mode 
} else { 
    //code for landscape mode 
} 

Когда суперкласс this является Activity

0

если вы хотите переопределить метод onConfigurationChanged и s до тех пор, пока он не захочет сделать основной материал, тогда рассмотрите возможность использования super.onConfigyrationChanged() в качестве первого выражения в методе overriden.

1

В классе активности используют метод ниже:

@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"> 

Это все !!

Смежные вопросы