Android屏幕方向切换实现方法

发布时间:2023-05-14

一、概述

屏幕方向切换是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