2016-01-21 2 views
1

У меня есть активность, зафиксированная на манифесте в ландшафтном режиме, и мне нужно определить, поворачивается ли экран до «Портрет». на данный момент, я использую и играю с и устанавливаю условия на Ориентационные значения, но я чувствую, что это непротиворечиво и что есть слишком много дел для обработки, и мне нужно будет отслеживать все значения ориентации чтобы действительно следить за все переданные значения, я вроде чувствую, что я изобретать колесо ..Определить поворот на портрет, если активность зафиксирована в ландшафтном режиме

private void listenToDeviceRotation() { 
    OrientationEventListener mOrientationEventListener = new OrientationEventListener (CodesActivity.this) { 

     @Override 
     public void onOrientationChanged (int orientation) { 
      if (orientation == ORIENTATION_UNKNOWN) { 
       return; 
      } 

      Log.e ("-- " + CodesActivity.class.getSimpleName() + " - ", "ORIENTATION : " + orientation); 

      if (firstOrientation == -1) { 
       firstOrientation = orientation; 
       return; 
      } 

      if (((orientation >= 0 && orientation < 120) || (orientation > 240 && orientation < 360))) { 
       finish(); 
       return; 
      } 
     } 
    }; 

    if (mOrientationEventListener.canDetectOrientation()){ 
     mOrientationEventListener.enable(); 
    } 
} 

есть ли лучший способ получить поворот экрана/ориентацию, даже если активность фиксируется в пейзаж?

ps: I target API 17.

Спасибо.

ответ

-1

В ориентации изменился слушатель просто сделать это:

getResources().getConfiguration().orientation; 

Я предполагаю, что вы просто хотите знать, если телефон пользователя находится в портретном режиме? Без физического изменения orientation.

Вы получите либо ORIENTATION_PORTRAIT, либо ORIENTATION_LANDSCAPE.

Посмотрите также ответы на вопросы here.

+1

Это не работает. Функция getResources(). GetConfiguration(). Always всегда возвращает то, что объявлено в манифесте. – Copernic

0

Это то, что я в конечном итоге делает (я уверен, что она может и должна быть улучшена, я должен был придумать что-то достаточно быстро до срока :))

private final static int LeftMin  = 240; 
private final static int LeftMax  = 360; 
private final static int LeftRotFirer = 340; 
private final static int RightMin  = 0; 
private final static int RightMax  = 120; 
private final static int RightRotFirer = 20; 

private int firstOrientation = -1; 

private List<Integer> passedPositions; 

private void listenToDeviceRotation() { 
    orientationEventListener = new OrientationEventListener (CodesActivity.this) { 

     @Override 
     public void onOrientationChanged (int orientation) { 
      if (orientation == ORIENTATION_UNKNOWN) { 
       return; 
      } 

      rotationHandler (orientation); 
     } 
    }; 

    if (orientationEventListener.canDetectOrientation()){ 
     orientationEventListener.enable(); 
    } 
} 

private void rotationHandler (int orientation) { 

    if (firstOrientation == -1) { 
     firstOrientation = orientation; 
     return; 
    } 

    if (firstOrientation > LeftMin && firstOrientation < LeftMax) { 
     if (orientation > LeftRotFirer || orientation < RightRotFirer) { 
      orientationEventListener.disable(); 
      finish(); 
      return; 
     } 
    } 

    passedPositions.add (orientation); 

    if (firstOrientation > RightMin && firstOrientation < RightMax) { 
     if (orientation > LeftRotFirer || orientation < RightRotFirer) { 
      for (int i = 0; i < passedPositions.size(); i ++) { 
       int passedOrientation = passedPositions.get (i); 
       if (passedOrientation < LeftRotFirer && passedOrientation > LeftMin) { 
        finish(); 
        orientationEventListener.disable(); 
        return; 
       } 
      } 
     } 
    } 
} 
Смежные вопросы