一、概述
屏幕方向切換是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
微信掃一掃
支付寶掃一掃