一、屏幕横竖屏切换的代码
竖屏:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
横屏:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
获得当前屏幕状态:
getResources().getConfiguration().orientation
此状态可为:Configuration.ORIENTATION_PORTRAIT和Configuration.ORIENTATION_LANDSCAPE
二、横竖屏切换Activity生命周期回调
横竖屏属性可以在AndroidManifest.xml中设置,也可以在MainActivity.java中进行设置(上面已经提及)。
本节主要讲解在AndroidManifest.xml中的设置
<activity android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait">
</activity>(一)configChanges属性
设置configChanges这个值可以避免Activity生命周期被回到。该部分具体的参数:
- orientation:屏幕在纵向和横向间旋转
- keyboardHidden:键盘显示或隐藏
- screenSize:屏幕大小改变
- fontScale:用户变更了首选字母大小
- locale:用户选择了不同的语言设定
- keyboard:键盘类型变更,如手机从九宫格键盘变为全键盘
- touchscreen或navigation:键盘或导航方向变换,一般不会发生这种情况。
前面三个是常用的,后面属性很少使用
如果要activity中的生命周期不回调,就要设置:
android:configChanges="orientation|keyboardHidden|screenSize"
缺少其中任一一个都会Activity生命周期回调,即如下情况:

不发生回调是如下情况:

在这附上对应的代码:
MainActivity.java
public class MainActivity extends AppCompatActivity {
private String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate");
Button bt = (Button)findViewById(R.id.bt_skip_other_activity);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.i(TAG, "onConfigurationChanged");
initChange();
}
private void initChange(){
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
Log.i(TAG, "屏幕改变,当前为竖屏");
else
Log.i(TAG, "屏幕改变,当前为横屏");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "onRestart");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume");
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
Log.i(TAG, "onSaveInstanceState");
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, "onRestoreInstanceState");
}
}