高级UI

Android 横竖屏切换

2018-10-06  本文已影响0人  我啊翔1314

有时在开发的过程中,我们需要实现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 横竖屏切换
上一篇下一篇

猜你喜欢

热点阅读