gpt4 book ai didi

android - 屏幕方向横向颠倒 - 为什么?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:35:18 24 4
gpt4 key购买 nike

我使用以下代码根据用户偏好设置方向锁定:

 private void doLock(boolean locked) {
if (locked) {
int o = getResources().getConfiguration().orientation;
if (o == Configuration.ORIENTATION_LANDSCAPE)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else if (o == Configuration.ORIENTATION_PORTRAIT)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
}

它有效,除了我处于解锁模式 (SCREEN_ORIENTATION_SENSOR) 并且屏幕正确显示 LANDSCAPE (!),然后调用 doLock (真) 和...

它不是锁定到当前(正确)横向 View 中的LANDSCAPE,而是锁定到颠倒横向 View 。即,完全相同但垂直翻转(y 变为 -y)。

这是为什么?我该如何解决这个问题才能解决它?

我的初步查询显示有 quite a few除了常见的两个(portraitlandscape)之外的可能性,包括reverseLandscape,但我的直觉告诉我这个问题可能是device-dependent因此,通过使用它,我可能只解决了我手机的问题,而不是所有其他设备的问题。

有没有办法在所有设备中强制正确的landscape方向(当从sensor切换时)?

为了使这个问题更清晰和更容易重现,以下是展示问题的步骤:

  1. 开始时手机向右旋转(顺时针),处于解锁模式(SCREEN_ORIENTATION_SENSOR),屏幕正确显示LANDSCAPE (!) ,
  2. 然后调用doLock(true)
  3. 屏幕不是锁定到当前(正确的)横向 View 中的LANDSCAPE,而是锁定到颠倒横向 View 。即完全相同但垂直翻转(y 变为 -y)。

最佳答案

尝试以下通过代码禁用和启用方向(这将适用于 API 级别 7 及更高版本):

public static void disableRotation(Activity activity) {
final int orientation = activity.getResources().getConfiguration().orientation;
final int rotation = activity.getWindowManager().getDefaultDisplay()
.getOrientation();

// Copied from Android docs, since we don't have these values in Froyo
// 2.2
int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO) {
SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}

if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
} else if (rotation == Surface.ROTATION_180
|| rotation == Surface.ROTATION_270) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
} else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
}
}

public static void enableRotation(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}

关于android - 屏幕方向横向颠倒 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12059447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com