AndroidManifest:
android:configChanges="orientation|screenSize"
Aty先设置这个为了横竖屏直走onConfigurationChanged
(其实这个写不写无所谓,暂时没发现其他的)
自定义MyRoientationEventListener内部类
//继承OrientationEventListener类监听手机的旋转
public class MyOrientationEventListener extends OrientationEventListener {
public MyOrientationEventListener(Context context) {
super(context);
}
public MyOrientationEventListener(Context context, int rate) {
super(context, rate);
}
@Override
public void onOrientationChanged(int i) {
//i 表示偏移角度 -1的话是水平放置 0~359 手机逆时针旋转的话是 慢慢增加的
int screenOrientation = getResources().getConfiguration().orientation;
if (((i >= 0) && (i < 45)) || (i > 315)) {
//设置竖屏
if (screenOrientation != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
&& i != ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
} else if (i > 255 && i < 315) {
//设置横屏
if (screenOrientation != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
} else if (i > 45 && i < 135) {
//设置反向横屏
if (screenOrientation != ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
} else if (i > 135 && i < 225) {
//反向竖屏
if (screenOrientation != ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
}
}
}
}
最上面定义(这个,,,,为了我以后粘贴方便 弄出来的)
//横屏相关
private MyOrientationEventListener mListener;
private int orientation;
初始化:
orientation = getResources().getConfiguration().orientation;
mListener = new MyOrientationEventListener(this);
boolean autoRotateOn = (Settings.System.getInt(getContentResolver(),
Settings.System.ACCELEROMETER_ROTATION, 0) == 1);
if (autoRotateOn) {
mListener.enable();
}
OK到此完成
----------------------------------------------------------------------------------------------------------------------------
建议:
多用相对布局(虽然之前都是看别人文章这么写,可是不到实际项目里面就不在意,哈哈哈)
在Project目录下,新建layout-land 文件夹,在里面建同名的xml文件就可以在横竖屏切换的时候掉不同布局(在onConfigurationChanged回调里面重新绑定布局)