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