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();
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();
}
}
@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();
}