以下提供获取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“ 键盘模式发生变化,例如:用户接入外部键盘输入。
“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方法