偶然在项目中用到播放视频时, 需要横屏将视频全屏播放, 所以需要监听屏幕的横竖屏切换事件
横竖屏切换监听效果:
giphy (1).gif
ConfigChanges, 用于捕获手机状态的改变, 当横竖屏切换, 屏幕尺寸变化, 弹出键盘, 系统设置改变等条件, 就会触发回调事件 onConfigurationChanged 让 Activity 捕捉到该事件, 需要做如下步骤:
声明 Activity 需要捕捉的事件类型, 在 manifest 的配置:
- <activity android:name=".MainActivity"
- android:configChanges="orientation|keyboard|layoutDirection|screenSize">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
configChanges 配置参数说明:
mcc 移动国家号码, 由三位数字组成, 每个国家都有自己独立的 MCC, 可以识别手机用户所属国家
mnc 移动网号, 在一个国家或者地区中, 用于区分手机用户的服务商
locale 所在地区发生变化
touchscreen 触摸屏已经改变
keyboard 键盘模式发生变化, 例如: 用户接入外部键盘输入
keyboardHidden 用户打开手机硬件键盘
navigation 导航发生了变化
orientation 横竖屏切换
fontScale 全局字体大小缩放发生改变
重写 Activity 中的 onConfigurationChanged 方法, 加上自己的处理事件
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
- Toast.makeText(getApplicationContext(), "横屏", Toast.LENGTH_SHORT).show();
- }else{
- Toast.makeText(getApplicationContext(), "竖屏", Toast.LENGTH_SHORT).show();
- }
- }
Configuration.ORIENTATION_LANDSCAPE 竖屏
Configuration.ORIENTATION_PORTRAIT 横屏
另外:
不设置 activity 的 android:configChanges 属性时, 切换横竖屏会调用各个生命周期方法, 横屏调一次, 竖屏调用 2 次
设置 activity 的 android:configChanges="orientation 属性时, 切换横竖屏会调用各个生命周期方法, 横屏调一次, 竖屏调用 1 次
设置 activity 的 android:configChanges="orientation|keyboardHidden" 时, 切换横竖屏不会调用各个生命周期方法, 只会执行 onConfigurationChanged 方法
来源: http://www.jianshu.com/p/85a87182de6d