一、概述
屏幕方向切換是Android應用程序中經常用到的功能之一,一些遊戲和多媒體應用,用戶更願意在橫向屏幕下進行操作,而在通訊和社交應用中,用戶更傾向於使用豎屏操作。因此,為了能夠讓用戶更舒適的使用應用,實現屏幕方向切換的功能是必不可少的。
二、如何實現屏幕方向切換
Android提供了簡單的API可以實現屏幕方向切換的功能,具體操作如下:
// 在AndroidManifest.xml文件中設置Activity為可旋轉 <activity android:name=".MainActivity" android:configChanges="orientation|screenSize"> </activity> // 設置Activity內的布局文件,添加 <requestFeature android:windowIsTranslucent="true" /> setContentView(R.layout.activity_main); requestWindowFeature(Window.FEATURE_NO_TITLE); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); requestWindowFeature(Window.FEATURE_PROGRESS); requestWindowFeature(Window.FEATURE_SWIPE_TO_DISMISS); requestWindowFeature(Window.FEATURE_OPTIONS_PANEL); Window window = getWindow(); window.setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR); window.addFlags(WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON); window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); window.addFlags(WindowManager.LayoutParams.FLAG_SECURE); window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); window.requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
三、實現過程
如何動態實現橫向、豎向切換呢?可以通過在Activity內定義一個rotateView()函數,在函數中根據屏幕方向,動態更改布局文件即可。
public void rotateView(){ Configuration config = getResources().getConfiguration(); if(config.orientation == Configuration.ORIENTATION_PORTRAIT){ setContentView(R.layout.activity_main_landscape); } else { setContentView(R.layout.activity_main); } }
四、注意事項
在AndroidManifest.xml文件中添加 android:configChanges=”orientation|screenSize”,這是因為切換屏幕方向時會觸發Activity的生命周期中的某些方法,但如果橫豎屏切換時調用的是新的layout文件,就會導致當前Activity被重新創建,我們的一些變數就會被銷毀,就相當於Activity和它所包含的原先的對象被銷毀了,將從頭開始重新執行 onCreate()方法,將耗費大量的內存和資源,效率很低。
五、總結
Android屏幕方向切換實現方法是一個相當基礎和簡單的操作,能夠提供用戶更好的使用體驗,需要注意的就是在切換過程中保留數據,防止Activity被多次重建,從而影響性能。
完整代碼:https://github.com/shadowNightXZ/ScreenOrientationDemo
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/160021.html