点击按钮切换横竖屏

1.定义如下变量
    private OrientationEventListener mOrientationListener; // 屏幕方向改变监听器
    private boolean mIsLand = false; // 是否是横屏
    private boolean mClick = false; // 是否点击
    private boolean mClickLand = true; // 点击进入横屏
    private boolean mClickPort = true; // 点击进入竖屏


2.初始化时调用如下代码:

/**
     * 开启监听器
     */
    private final void startListener() {
        mOrientationListener = new OrientationEventListener(this) {
            @Override
            public void onOrientationChanged(int rotation) {
                // 设置竖屏
                if (((rotation >= 0) && (rotation <= 45)) || (rotation >= 315)||((rotation>=135)&&(rotation<=225))) {//portrait
                    if (mClick) {
                        if (mIsLand && !mClickLand) {
                            return;
                        } else {
                            mClickPort = true;
                            mClick = false;
                            mIsLand = false;
                        }
                    } else {
                        if (mIsLand) {
                            setPortait();
                            mIsLand = false;
                            mClick = false;
                        }
                    }
                }
                // 设置横屏
                else if (((rotation > 45) && (rotation < 135))||((rotation>225)&&(rotation<315))) {//landscape
                    if (mClick) {
                        if (!mIsLand && !mClickPort) {
                            return;
                        } else {
                            mClickLand = true;
                            mClick = false;
                            mIsLand = true;
                        }
                    } else {
                        if (!mIsLand) {
                            setLanscape();
                            mIsLand = true;
                            mClick = false;
                        }
                    }
                }
            }
        };
        mOrientationListener.enable();
    }


3.ondestory方法中,关闭监听

mOrientationListener.disable();



4.点击切换按钮执行如下方法:

public void changeScreen() {
        mClick = true;
        if (!mIsLand) {
            setLanscape();
            mIsLand = true;
            mClickLand = false;
        } else {
            setPortait();
            mIsLand = false;
            mClickPort = false;
        }
    }

5.返回键监听:

 //点击返回按钮及系统返回
    private void onActivityBack() {
        if (isLandscape()) {//水平
            if (isLandscape()) {
                setPortait();
            }else{
                setLanscape();
            }
        } else {//竖直方向
            finish();
        }
    }


6.oncfigurationChanged方法修改

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Utils.printLog("lb","onConfigurationChanged=====");
        if (isLandscape()) {//水平
            Utils.printLog("lb","onConfigurationChanged===水平==");
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }else if (isPortrait()) {//竖直方向
            Utils.printLog("lb","onConfigurationChanged===竖直==");
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }

       //此处可以隐藏显示你的布局
        setLandscapeOrPortraitLayout();
    }




你可能感兴趣的:(点击按钮切换横竖屏)