Android determine screen orientation at runtime

后端 未结 6 731
清酒与你
清酒与你 2021-02-01 05:41

Here\'s a pseudo code to detect screen rotate event, and decide to retain or changes the screen orientation.

public boolean onOrientationChanges(orientation) {
          


        
6条回答
  •  南方客
    南方客 (楼主)
    2021-02-01 05:49

    You need a Display instance firstly:

    Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
    

    Then orientation may be called like this:

    int orientation = display.getOrientation();
    

    Check orientation as your way and use this to change orientation:

    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    

    I hope it helps.

    Update:

    Okay, let's say you've an oAllow var which is Boolean and default value is False.

    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
        int orientation = display.getOrientation(); 
        switch(orientation) {
            case Configuration.ORIENTATION_PORTRAIT:
                if(!oAllow) {
                        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                }
                break;
            case Configuration.ORIENTATION_LANDSCAPE:
                if(!oAllow) {
                        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                }
                break;
        }
    }
    

    You can add more choices.

    I didn't try this sample, but at least tells you some clues about how to solve. Tell me if you got any error.

    UPDATE

    getOrientation() is already deprecated see here. Instead Use getRotation(). To check if the device is in landscape mode you can do something like this:

    Display display = ((WindowManager) getSystemService(WINDOW_SERVICE))
            .getDefaultDisplay();
    
    int orientation = display.getRotation();
    
    if (orientation == Surface.ROTATION_90
            || orientation == Surface.ROTATION_270) {
        // TODO: add logic for landscape mode here            
    }
    

提交回复
热议问题