一另患、生命周期
第一次啟動(dòng):
onCreate()>onStart()o>onResume()
第一次切換
onPause()>onStop()>onDestory()>onCreate()>onStart()>onResume()
第二次切換
onPause()>onStop()>onDestory()>onCreate()>onStart()>onResume()
從上面的生命周期可以看出衅谷,在做切換時(shí)患雏,Activity做的動(dòng)作是把原頁面銷毀再重新創(chuàng)建一個(gè)新頁面矿微。
二座慰、設(shè)置
1仑氛、在xml中設(shè)置
強(qiáng)制豎屏:android:screenOrientation="portrait"
強(qiáng)制橫屏:android:screenOrientation="landscape"
注意:在不指定時(shí)坝疼,是跟隨重力切換的搜贤。如果設(shè)置為android:screenOrientation="sensor",那么不管系統(tǒng)設(shè)置是否能跟隨重力切換都可以跟隨重力切換橫豎屏钝凶。
2仪芒、在代碼中指定
切換橫屏:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
切換豎屏:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
注意:如果你使用了setRequestedOrientation方法,那么就不會(huì)跟隨重力切換了腿椎,無法設(shè)置回來桌硫。
三、Activity重建問題
1.如果不想讓Activity重新創(chuàng)建啃炸,在Android3.2之前添加:android:configChanges="orientation|keyboardHidden"
在Android3.2之后因?yàn)槠聊幌袼刂狄矔?huì)跟隨改變铆隘,需要添加:android:configChanges="screenSize|orientation|keyboardHidden",Activity就不會(huì)重建走生命周期南用,只會(huì)執(zhí)行onConfigurationChanged()方法
onConfigurationChanged()方法
當(dāng)設(shè)置android:configChanges="screenSize|orientation|keyboardHidden"才會(huì)觸發(fā)該方法膀钠。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//可以在這做你切換時(shí)需要的操作
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Logger.e("當(dāng)前屏幕為橫屏");
} else {
Logger.e("當(dāng)前屏幕為豎屏");
}
}
//獲取屏幕方向 1豎屏 2橫屏
int screenNum = getResources().getConfiguration().orientation;
screenOrientations屬性說明
landscape
橫屏,顯示時(shí)寬度大于高度裹虫;
portrait
豎屏肿嘲, 顯示時(shí)高度大于 寬 度 ;
user
用戶當(dāng)前的首選方向筑公;
behind
繼承Activity堆棧中當(dāng)前Activity下面的那個(gè)Activity的方向雳窟;
sensor
由物理感應(yīng)器決定顯示方向,它取決于用戶如何持有設(shè)備匣屡,當(dāng) 設(shè)備 被旋轉(zhuǎn)時(shí)方向會(huì)隨之變化——在橫屏與豎屏之間封救;
nosensor
忽略物理感應(yīng)器——即顯示方向與物理感應(yīng)器無關(guān)拇涤,不管用戶如何旋轉(zhuǎn)設(shè)備顯示方向都不會(huì)隨著改變("unspecified"設(shè)置除外);
unspecified
未指定誉结,此為默認(rèn)值鹅士,由Android系統(tǒng)自己選擇適當(dāng)?shù)姆较颍x擇策略視具體設(shè)備的配置情況而定惩坑,因此不同的設(shè)備會(huì)有不同的方向選擇掉盅;