Capture orientation change event before it happens

前端 未结 2 689
甜味超标
甜味超标 2021-01-28 04:30

It\'s simple to lock the orientation to portrait or landscape.




        
相关标签:
2条回答
  • 2021-01-28 04:59

    Use this piece of code in onPause() method. When rotatio changes, activty re-coustructs it self which means on-Create is called again and previous activity is finish();

        int currentOrientation = getResources().getConfiguration().orientation;
        if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE){
            if (display.getRotation() == Surface.ROTATION_0)
            // play with different angles e.g ROTATION_90, ROTATION_180
        }
    

    So when rotation changes the previous activites's onPause() will be called and at that stage you can decide what you want with new orientation.

    0 讨论(0)
  • 2021-01-28 05:00
    1. Force the activity to stay in one mode (e.g. landscape) via setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); in onCreate(..)

    2. Attach your own orientation listener,

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

              @Override
              public void onOrientationChanged(int orientation) {
                  if (Math.abs(orientation - 90) < 30){
                         // your device orientation has changed, you can update UI                        accordingly, (layout won't rotate).
              }
          };
          orientationEventListener.enable();
      

    Keep in mind that if you do this you will receive x & y axis of touch events 'inversed' when you discard the configuration change. Also, if you have a navigation bar, it will remain where it is and won't rotate as well!

    0 讨论(0)
提交回复
热议问题