2013-05-20 97 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

編輯:
注意:此代碼將人像80-90度和> = 320,這是可以改變的。
如果這段代碼沒有在那裏運行,你可能還需要在UI線程上運行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

終於!我正在尋找一個類似的解決方案几個小時 –

相關問題