Android监听横竖屏切换

作者: 奔跑吧李博 | 来源:发表于2018-02-23 11:14 被阅读144次

    偶然在项目中用到播放视频时,需要横屏将视频全屏播放,所以需要监听屏幕的横竖屏切换事件。

    横竖屏切换监听效果:


    giphy (1).gif

    ConfigChanges,用于捕获手机状态的改变,当横竖屏切换,屏幕尺寸变化,弹出键盘,系统设置改变等条件,就会触发回调事件onConfigurationChanged。让Activity捕捉到该事件,需要做如下步骤:

    1. 声明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“ 全局字体大小缩放发生改变

    1. 重写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方法

    相关文章

      网友评论

        本文标题:Android监听横竖屏切换

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