一、概述
屏幕方向切换是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