Android橫豎屏切換適配,通常開發都以豎屏爲默認配置,這裏也以豎屏UI爲前提。
1.最直接簡單的,指定全部的activity的方向爲豎屏,就是禁止進行橫豎屏切換。
2.在manifest文件裏面配置html
android:configChanges="keyboardHidden|screenSize|orientation"
旋轉屏幕時activity不會銷燬,會直接把UI顯示在橫屏上,這時會走onConfigurationChanged方法,若是要進行橫屏UI的適配,能夠在這裏從新setContentView,初始化UI,數據還在activity裏面能夠直接鋪到UI上去。
橫豎屏的資源文件配置:layout文件夾是默認的佈局文件夾,必定要有,以豎屏爲默認配置。而後新建layout-land文件夾,裏面放相同的名稱的acitivity的佈局文件,只是這裏的是橫屏的佈局,而後在onConfigurationChanged裏面判斷android
@Override public void onConfigurationChanged(Configuration newConfig) { if (newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){ //若是是橫屏了,在這裏設置橫屏的UI }else{ //不然,在這裏設置豎屏的UI } super.onConfigurationChanged(newConfig); }
3.若是不在manifest文件裏面配置,橫豎屏切換時,會走onSaveInstanceState方法(在這裏保存數據),會從新加載當前的activity,重走一遍生命週期,系統會自動根據當前屏幕狀態去加載對應橫豎屏的佈局文件。
4.橫豎屏切換的小技巧,適用於特定場景,好比豎屏是listview的形式,橫屏是gridview網格的形式,那麼這個控件能夠用recyclerview,在onConfigurationChanged方法裏面根據當前是橫屏仍是豎屏,設置recyclerview的setLayoutManager來改變視圖。
5.若是用戶就是以橫屏狀態打開APP呢,以豎屏爲默認設置,在打開頁面時,並不會走onConfigurationChanged方法,這個時候能夠用下面的方法判斷ide
if (getResources().getConfiguration().orientation==Configuration.ORIENTATION_LANDSCAPE){ //若是是橫屏了,在這裏設置橫屏的UI }else{ //不然,在這裏設置豎屏的UI }
最後,關於資源限定符(好比橫豎屏,屏幕最小寬度)的使用,參考官方文檔佈局