这两天遇到一个问题,从A Activity打开B Activity然后,又从B finish到A,会导致A切换一次屏幕(横,竖),然后恢复正常。在Android 8.1下必现。

查询了下Google Android 9.0的文档。在Android9.0中,修改了旋转的图标,并且增加了一种新的旋转方式。

在Android9以前,点击下拉栏种的自动旋转按钮,会切换两种状态:打开自动旋转和竖直屏幕。Android9修改成了打开和关闭自动旋转。并且在关闭自动旋转的时候,利用Navigation Bar,增加了第四个按钮,手动来切换屏幕方向。

如上图,如果躺在床上玩手机,关闭了自动旋转。但是突然有一个视频想看,只需要横着手机,就会在底部导航多出来一个按钮,手动点击后,屏幕发生旋转并且锁定。需要恢复竖屏,只需要重复一次操作就可以了。我觉得还是很方便的,就是不知道在只有实体按钮的手机上面会怎么处理。

首先,当然是想到在AndroidManifest.xml文件里面去修改,给A Activity添加属性:

android:configChanges="orientation|screenSize|keyboardHidden"

但是这个方法并不起作用。然后我就继续Google,发现在Google issue Tracker也有人遇到同样的问题,谷歌已经接受这个Issue,预计很快就应该处理了。按照20楼的方案尝试了下,成功了。

onCreate(){  
	setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);  
}  
  
onPause(){  
	if (android.os.Build.VERSION.SDK_INT >= 27) {  
	    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);  
	}  
}  
  
onResume(){  
    if (android.os.Build.VERSION.SDK_INT >= 27) {  
	    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);  
	}  
}

其实就是判断一下SDK版本,然后强制重置一下屏幕旋转的状态就好了。

Ref :