200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Android 自动旋转屏幕总结

Android 自动旋转屏幕总结

时间:2020-09-28 06:59:02

相关推荐

Android 自动旋转屏幕总结

android:screenOrientation常用的属性值:

unspecified,默认值,由系统决定,不同手机可能不一致

landscape,强制横屏显示

portrait,强制竖屏显示

behind,与前一个activity方向相同

sensor,根据物理传感器方向转动,用户90度、180度、270度旋转手机方向,activity都更着变化

sensorLandscape,横屏旋转,一般横屏游戏会这样设置

sensorPortrait,竖屏旋转

nosensor,旋转设备时候,界面不会跟着旋转。初始化界面方向由系统控制

user,用户当前设置的方向

fullSensor显示的方向(4个方向)是由设备的方向传感器来决定的,除了它允许屏幕有4个显示方向之外,其他与设置为“sensor”时情况类似,不管什么样的设备,通常都会这么做。例如,某些设备通常不使用纵向倒转或横向反转,但是使用这个设置,还是会发生这样的反转。这个值在API Level 9中引入

fulluser如果用户锁定了基于传感器的旋转,其行为与 user 相同,否则,其行为与 fullSensor 相同,允许所有 4 种可能的屏幕方向。 API 级别 18 中的新增配置。

locked将方向锁定在其当前的任意旋转方向。API 级别 18 中的新增配置。

配置方法一:

<activity

android:name=“xxx”

android:configChanges=“orientation|screenSize|keyboardHidden”

android:screenOrientation=“portrait”

/>

配置方法二:

在java代码中使用。

/**

设置当前屏幕方向为横屏

*/

private void setHorizontalScreen(Activity activity) {

if (activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

}

}

/**

设置当前屏幕方向为竖屏

*/

private void setVerticalScreen(Activity activity) {

if (activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

}

android:configChanges常用的属性

正常横竖屏切换的生命周期:

onPause()->onSaveInstanceState()-> onStop()->onDestroy()->onCreate()->onStart()->onRestoreInstanceState->onResume()

如何避免切屏时从新调用各个生命周期。

所以当屏幕发生旋转的时候,activity会重走生命周期,但是如果不希望重走生命周期,那么可以设置android:configChanges=”orientation|screenSize|keyboardHidden”,这样当屏幕发生旋转的时候便是回调onConfigurationChanged()函数。

有需要可以后面加上下面的属性

android:configChanges=”orientation|screenSize|keyboardHidden|mcc|mnc|等

mcc:The IMSI mobile country code (MCC) has changed — a SIM has been detected and updated the MCC.

IMSI(国际移动用户识别码)发生改变,检测到SIM卡,或者更新MCC

mnc:The IMSI mobile network code (MNC) has changed — a SIM has been detected and updated the MNC.

IMSI网络发生改变,检测到SIM卡,或者更新MCC

其中mcc和mnc理论上不可能发生变化

locale:The locale has changed — the user has selected a new language that text should be displayed in.

语言发生改变,用户选择了一个新的语言,文字应该重新显示

touchscreen:The touchscreen has changed. (This should never normally happen.)

触摸屏发生改变,这通常是不应该发生的

keyboard:The keyboard type has changed — for example, the user has plugged in an external keyboard.

键盘类型发生改变,例如,用户使用了外部键盘

keyboardHidden:The keyboard accessibility has changed — for example, the user has revealed the hardware keyboard.

键盘发生改变,例如,用户使用了硬件键盘

navigation:The navigation type (trackball/dpad) has changed. (This should never normally happen.)

导航发生改变,(这通常不应该发生) 举例:连接蓝牙键盘,连接后确实导致了navigation的类型发生变化。因为连接蓝牙键盘后,我可以使用方向键来navigate了

screenLayout:The screen layout has changed — this might be caused by a different display being activated.

屏幕的布局发生改变,这可能导致激活不同的显示

fontScale:The font scaling factor has changed — the user has selected a new global font size.

全局字体大小缩放发生改变

orientation:The screen orientation has changed — that is, the user has rotated the device.设备旋转,横向显示和竖向显示模式切换。

screenSize: 屏幕大小改变了

smallestScreenSize: 屏幕的物理大小改变了,如:连接到一个外部的屏幕上

layoutDirection:layoutDirection属性,当改变语言设置后,该属性也会成newConfig中的一个mask位。所以ActivityManagerService(实际在ActivityStack)在决定是否重启Activity的时候总是判断为重启。

需要在android:configChanges 中同时添加locale和layoutDirection。

在不退出应用的情况下切换到Settings里切换语言,发现该Activity还是重启了。

横竖屏切换不同的布局

如果想要横竖屏是不同的布局,可以通过以下两种方法来切换布局:

(1)在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如:layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序调用Activity的onCreate方法中的setOnContent(xxx),并自动加载相应的布局。

(2)假如布局资源不按照如上设置,则可以通过java代码来判断当前是横屏还是竖屏然后来加载相应的xml布局文件。因为当屏幕变为横屏的时候,系统会重新加载当前Activity的onCreate方法(也就是说:该Activity的生命周期要重头开始),你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout 。

/** 1:竖屏 2:横屏 判断屏幕以旋转的方向 */private int orientation;orientation=getResources().getConfiguration().orientation;

参考连接:

/lixiaoliang0723/article/details/105220692/ /haoxuhong/article/details/80106674

/kongbaidepao/article/details/73381373

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。