以下提供获取Android设备横竖屏状态方法
/** * 获取当前屏幕是否是横屏(默认) * * @param context * @return */ public static boolean isCurOriLand(Context context) { boolean isLand = true; try { Configuration mConfiguration = context.getResources().getConfiguration(); //获取设置的配置信息 int ori = mConfiguration.orientation; //获取屏幕方向 if (ori == mConfiguration.ORIENTATION_LANDSCAPE) { //横屏 isLand = true; } else if (ori == mConfiguration.ORIENTATION_PORTRAIT) { //竖屏 isLand = false; } } catch (Exception e) { e.printStackTrace(); } return isLand; }
偶然在项目中用到播放视频时,需要横屏将视频全屏播放,所以需要监听屏幕的横竖屏切换事件。
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“ 键盘模式发生变化,例如:用户接入外部
- 重写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方法