默认情况下Activity进行屏幕旋转会自动进行onDestroy并重新onCreate
一、非默认情况下
在AndroidManifest.xml的Activity中配置
<activityandroid:name=".ui.activity.XXXXXActivity"android:launchMode="singleTask"android:screenOrientation="portrait"android:configChanges="keyboardHidden|orientation|screenSize"android:windowSoftInputMode="adjustPan" />
(1)禁止屏幕旋转
//始终竖屏android:screenOrientation="portrait"//始终横屏android:screenOrientation="landscape"
(2)Activity跟随旋转但不销毁和重启
android:configChanges="keyboardHidden|orientation|screenSize"
然后在Activity中重写onConfigurationChanged
方法
(仅作为监听屏幕横竖屏状态,吐司提示,可以不要)
@Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){Toast.makeText(this,"竖屏模式",Toast.LENGTH_SHORT).show();}else{Toast.makeText(this,"横屏模式",Toast.LENGTH_SHORT).show();}}
public static final int ORIENTATION_PORTRAIT = 1; // 标识竖屏
public static final int ORIENTATION_LANDSCAPE = 2; //标识横屏
二、通过 layout-land 构建专属的横屏布局模式
1、首先在工程res目录下新建一个layout-land
2、其次在layout-land目录中新建一个同名
但是是横屏效果的布局
3、代码
@Overridepublic void onClick(View view) {//按钮控制切换横竖屏 R.id.img_rotate : 自己定义的一个按钮if (view.getId() == R.id.img_rotate){int screenNum = getResources().getConfiguration().orientation;//判断屏幕当前状态if (screenNum != Configuration.ORIENTATION_LANDSCAPE){//切换成横屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);}else {//切换成竖屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);}}}
按照上面的流程,构建需要横屏效果的layout-land目录布局,就可以达到有效解决屏幕横竖屏切换啦
三、其他系列文章
Android基础篇 屏幕横竖屏切换以及生命周期管理 上篇
https://blog.csdn.net/weixin_44720673/article/details/114628214