欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

禁止屏幕旋转 180 度,只能旋转 90 、 270 度

程序员文章站 2022-05-17 10:08:15
...
问题描述:禁止屏幕旋转 180 度,只能旋转 90 、 270 度

分析过程:

PhoneWindowManager.java 中 rotationForOrientationLw 中有一段代码是负责这个问题的,如下:

if (mAllowAllRotations < 0) {
mAllowAllRotations = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_allowAllRotations) ? 1 : 0;
}
if (sensorRotation != mUpsideDownRotation
|| mAllowAllRotations == 1
|| orientation == ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
|| orientation == ActivityInfo.SCREEN_ORIENTATION_FULL_USER) {
preferredRotation = sensorRotation;
} else {
preferredRotation = lastRotation;
}
mAllowAllRotations 的默认值为 -1 ,也就是 mAllowAllRotations 由 config_allowAllRotations 这个
参数负责,当 config_allowAllRotations 为 false , mAllowAllRotations 为
0 。 mUpsideDownRotation 的值为 2 ,方向分为 mLandscapeRotation
( 1 )、 mSeascapeRotation ( 3 )、 mPortraitRotation ( 0 ) 、 mUpsideDownRotation ( 2 ) 。
sensorRotation 为 sensor 方向,手机实际的感应方向, lastRotation 为上一次的屏幕方向。当手机旋转
180 时, sensorRotation 为 2 , mUpsideDownRotation 也为 2 ,此时决定 preferredRotation 方向的只
有判断参数 mAllowAllRotations 是否等于 1 ,如果等于 1 ,则 preferredRotation = sensorRotation 可

以旋转 180 度,如果不等于 1 ,则 preferredRotation = lastRotation ,不能旋转 180 。

解决方案:
diff --git a/device/qcom/common/product/overlay/frameworks/base/core/res/res /values/config.xml
b/device/qcom/common/product/overlay/frameworks/base/core/res/res /values/config.xmlindex b3b7275..7082f01 100644 (file)
+++ b/device/qcom/common/product/overlay/frameworks/base/core/res/res /values/config.xml
@@ +119,14 @@
<bool name="config_suspendWhenScreenOffDueToProximity">true</bool>
<integer name="config_doubleTapOnHomeBehavior">1</integer>
+
<bool name="config_allowAllRotations">false</bool>