默認情況下Activity進行螢屏旋轉會自動進行onDestroy并重新onCreate
一、非默認情況下
在AndroidManifest.xml的Activity中配置
<activity
android: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方法
(僅作為監聽螢屏橫豎屏狀態,吐司提示,可以不要)
@Override
public 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、代碼
@Override
public 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/292205.html
標籤:其他
