有时在开发的过程中,我们需要实现Activity的横竖屏切换相关功能,特别是涉及到视频播放器的开发,横屏播放和竖屏播放的实现显得十分重要。
1.设置Activity显示方向
Android的屏幕显示方向通过设置AndroidManifest.xml中,activity的screenOrientation属性实现:
android:screenOrientation="portrait"
screenOrientation主要有以下七种属性值:
- portrait. 设置了该值Activity将会以竖屏显示。
- landscape. 设置了该值Activity将会以横屏显示。
- user: 设置了该值Activity将根据用户的首选的方向显示。
- behind: 根据下方Activity的方向显示(Activity堆栈中)。
- sensor:由重力感应器决定Activity的方向,用户旋转设备Activity的方向会改变。
- nosensor:不根据重力感应器改变Activity方向,用户旋转设备Activity的方向不会改变。
- 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横竖屏切换相关信息,请参考博客:
网友评论