2013-05-20 3 views
1

Я использую следующий код, чтобы изменить ориентацию своей деятельности, когда пользователь поворачивает устройство. Это отлично работает в первый раз, но не вызвано снова. Пожалуйста, поправьте меня.onConfigurationChanged не вызывается второй раз

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig);    
     Log.d("ACTIVITY","CHANGING ORIENTATION"); //No i18n 
     if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
      Log.d(TAG, "ORIENTATION CHANGED TO PORTRAIT"); // No I18N 
      setRequestedOrientation(Configuration.ORIENTATION_PORTRAIT); 
     } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
      Log.d(TAG, "ORIENTATION CHANGED TO LANDSCAPE"); // No I18N 
      setRequestedOrientation(Configuration.ORIENTATION_LANDSCAPE); 
     } 
    } 

@Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     Log.d("ACTIVITY","ON RESTORE INSTANCESTATE"); //No i18n 
     super.onRestoreInstanceState(savedInstanceState); 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     Log.d("ACTIVITY","ON SAVE INSTANCESTATE"); //No i18n 
     super.onSaveInstanceState(outState); 
    } 

ответ

2

После использования setRequestedOrientation(...); вы больше не имеют привилегию получать уведомления вращения.
Если вы хотите, чтобы выполнять специальные действия при возникновении вращения, вы можете использовать OrientationEventListener

EDIT:
ВНИМАНИЕ: этот код занимает портрет 80-90 градусов и> = 320, это может быть изменено.
Вам также может потребоваться запустить setRequestedOrientation в потоке пользовательского интерфейса, если этот фрагмент кода там не работает.

Вы должны сделать что-то вроде этого:

mOrientationListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_UI) { 

@Override 
    public void onOrientationChanged(int rotation) { 
     boolean changed = false; 

     if (((rotation >= 0) && (rotation <= 80)) || (rotation >= 320)) { 
         setRequestedOrientation(Configuration.ORIENTATION_PORTRAIT); 
     } else { 
         setRequestedOrientation(Configuration.ORIENTATION_LANDSCAPE); 
     } 
    } 
}; 
mOrientationListener.enable(); 
+0

Спасибо. Как это сделать? – vignesh

+0

Наконец-то! Я искал аналогичное решение в течение нескольких часов –

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