美文网首页高级UI
Android 横竖屏切换

Android 横竖屏切换

作者: 我啊翔1314 | 来源:发表于2018-10-06 17:26 被阅读0次

    有时在开发的过程中,我们需要实现Activity的横竖屏切换相关功能,特别是涉及到视频播放器的开发,横屏播放和竖屏播放的实现显得十分重要。

    1.设置Activity显示方向

    Android的屏幕显示方向通过设置AndroidManifest.xml中,activity的screenOrientation属性实现:

    android:screenOrientation="portrait"
    

    screenOrientation主要有以下七种属性值:

    1. portrait. 设置了该值Activity将会以竖屏显示。
    2. landscape. 设置了该值Activity将会以横屏显示。
    3. user: 设置了该值Activity将根据用户的首选的方向显示。
    4. behind: 根据下方Activity的方向显示(Activity堆栈中)。
    5. sensor:由重力感应器决定Activity的方向,用户旋转设备Activity的方向会改变。
    6. nosensor:不根据重力感应器改变Activity方向,用户旋转设备Activity的方向不会改变。
    7. unspecified: 使用默认值。显示的方向将由系统决定,由于设备的策略差异,不同设备显示的方向将会不同。

    2.处理运行时配置变更

    某些设备在运行时可能发生配置改变,这会导致Activity重启正在运行的Activity(先调用onDestroy再调用onCreate),重启Activity开销量十分大,且会造成不好的用户体验。android:configChanges的作用是在该属性中指定某些特定配置,如果这些配置发生改变则不会重启Activity(先调用onDstroy再调用onCreate),而是调用onConfigChanged方法。因此,在横竖屏切换时,由于运行时配置会发生变化,需要在android:configChanges添加如下内容:

    android:configChanges="orientation|keybordHidden"
    

    3.通过代码切换横竖屏

    通过代码切换横竖屏主要通过Activity的setRequestedOrientation(int requestedOrientation)实现:

    // 切换成竖屏
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    

    调用切换屏幕代码前需要配置configChanges属性:

    android:configChanges="orientation|keybordHidden"
    

    否则通过代码进行横竖屏切换可能会无效。
    每次屏幕切换时,Activity都会调用onConfigurationChanged方法,如果要在横竖屏变化时做一些操作,可将操作写在onConfigurationChanged中。

    @Override  
    public void onConfigurationChanged(Configuration config) {  
        super.onConfigurationChanged(config);
        // 屏幕切换时的操作
    }  
    

    4.横竖屏显示不同布局

    在res文件夹中分别创建layout-land和layout-port文件夹,并创建相同名称的布局文件,如创建MainActivity的布局文件layout_main.xml:


    res布局文件.png

    然后在onConfigurationChanged方法中,设置对应的布局文件:

    @Override  
    public void onConfigurationChanged(Configuration config) {  
        super.onConfigurationChanged(config);
        // 屏幕切换时的操作
        if (config.orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
            // 切换成竖屏
            setContentView(R.layout.activity_main);
            // findViewById
            // 进行一些操作。。。
        } else {
            // 切换成横屏
            setContentView(R.layout.activity_main);
            // findViewById
            // 进行一些操作。。。
        }
    }  
    

    这样,横竖屏切换时,就会加载不同的布局。
    如要查看更多Android横竖屏切换相关信息,请参考博客:

    1. Android Developer-处理运行时变更
    2. Android Developer-android:configChanges
    3. Android Developer-android:screenOrientation
    4. 关于Android Activity的configChanges属性的用法,设置屏幕旋转时activity不重新创建
    5. Android 横竖屏切换

    相关文章

      网友评论

        本文标题:Android 横竖屏切换

        本文链接:https://www.haomeiwen.com/subject/cvzcaftx.html