2016-01-15 6 views
1

Я добавил screenorientation = sensorLandscape в манифесте:reverse_landscape не получает срабатывает, даже если screenorientation является sensorlandscape

<activity 
     android:name=".WorkoutActivity" 
     android:screenOrientation="sensorLandscape" 
     android:configChanges="orientation|keyboardHidden|screenSize"> 
    </activity> 

Но экран остается только ландшафтном режиме и не изменения в обратном пейзаж на повороте телефона ,

ПРИМЕЧАНИЕ: Раньше я установил screenOrientation в ландшафт и теперь изменил на sensorLandscape.

EDIT На основании ответа Вячеслава я попытался это, но ориентация остается неизменной:

    if ((rotation == Surface.ROTATION_90 && lastrotation == Surface.ROTATION_270) 
         || (rotation == Surface.ROTATION_0 && lastrotation == Surface.ROTATION_180)){ 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
       } else if((rotation == Surface.ROTATION_270 && lastrotation == Surface.ROTATION_90) 
         || (rotation == Surface.ROTATION_180 && lastrotation == Surface.ROTATION_0)){ 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); 
       } 

В onConfigurationChanged, я назвал метод initOrientation()

Далее, когда я попытался следующий код, ориентация не прекращает вращение.

if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_0){ 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
       } else if(rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_180){ 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); 
       } 

ответ

0

Это распространенная проблема. Я использую OrientationEventListener

private void initOrientation() { 
     mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
     mLastRotation = mWindowManager.getDefaultDisplay().getRotation(); 
     myOrientationEventListener 
     = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_UI){ 
     @Override 
     public void onOrientationChanged(int orientation) { 
//   O.Log.d(TAG, "ORIENTATION: " + orientation); 
     Display display = mWindowManager.getDefaultDisplay(); 
     int rotation = display.getRotation(); 
     if (((rotation == Surface.ROTATION_90 && mLastRotation == Surface.ROTATION_270) 
       || (rotation == Surface.ROTATION_270 && mLastRotation == Surface.ROTATION_90) 
       || (rotation == Surface.ROTATION_0 && mLastRotation == Surface.ROTATION_180) 
       || (rotation == Surface.ROTATION_180 && mLastRotation == Surface.ROTATION_0))) { 


      // do something 

      mLastRotation = rotation; 
     } 
     } 
     }; 

      if (myOrientationEventListener.canDetectOrientation()){ 
      Toast.makeText(this, "Can DetectOrientation", Toast.LENGTH_LONG).show(); 
      myOrientationEventListener.enable(); 
      } 
      else{ 
      Toast.makeText(this, "Can't DetectOrientation", Toast.LENGTH_LONG).show(); 
      // finish(); 
      } 
    } 

Попробуйте это (код замораживает вращение UI):

if (rotation == Surface.ROTATION_0){ 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
        } else if(rotation == Surface.ROTATION_90){ 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
        } 
    else if (rotation == Surface.ROTATION_180){ 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); 
        } else if(rotation == Surface.ROTATION_270){ 
         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); 
        } 
+0

Привет Вячеслав, вы можете порадовать изменения, которые я сделал на вопрос на основе вашего ответа? Можете ли вы, пожалуйста, направить меня дальше? Я хочу, чтобы ориентация оставалась в Landscape или reverse_landscape на основе ориентации экрана. – suku

+0

@suku, Обновлено. Во всяком случае, я действительно не понимаю, какую реализацию пользовательского интерфейса вы хотите создать. – Vyacheslav