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(); }
mOrientationListener.disable();
public void changeScreen() { mClick = true; if (!mIsLand) { setLanscape(); mIsLand = true; mClickLand = false; } else { setPortait(); mIsLand = false; mClickPort = false; } }
//点击返回按钮及系统返回 private void onActivityBack() { if (isLandscape()) {//水平 if (isLandscape()) { setPortait(); }else{ setLanscape(); } } else {//竖直方向 finish(); } }
@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(); }