gpt4 book ai didi

android - WindowManager.DefaultDisplay.Rotation 始终为零

转载 作者:行者123 更新时间:2023-11-30 02:45:54 25 4
gpt4 key购买 nike

我正在开发 Xamarin Android 应用程序,该应用程序大部分在纵向模式下运行。但是,现在我们正在添加这样的功能,如果用户旋转设备,他们会在横向模式下获得另一个 View 。

我的问题是,当我尝试使用以下代码 fragment 时,无论我如何旋转设备,旋转始终具有值 SurfaceRotation.Rotation0(即 0)。

var windowManager = Application.Context.GetSystemService(Context.WindowService).JavaCast<IWindowManager>();
var rotation = windowManager.DefaultDisplay.Rotation; // Always gives zero

我在 FragmentView 中执行此代码(继承自基类,而基类继承自 MvxFragment)。我已经设法使用 OrientationEventListener 使一些代码工作,如下所示,但这并不理想。我想利用默认的 Android 行为来旋转设备,而不是尽可能定义我自己的角度范围:

// This works!
public override void OnOrientationChanged(int orientation)
{
if (app.IsPortrait && ((orientation >= 85 && orientation <= 95) || (orientation >= 265 && orientation <= 275)))
{
Mvx.Trace("Send message to open new view in landscape mode");
}
else if (!app.IsPortrait && (orientation < 85 || (orientation > 95 && orientation < 265 ) || orientation > 275))
{
Mvx.Trace("Send message to close the landscape view");
}
}

我正在使用连接的 LGE Nexus 5 设备和三星 GT-19300 进行测试,结果相同。两种设备都启用了自动旋转屏幕。我确实有一个 UI(与问题 in this thread 相对)。我已经添加了

android:configChanges="orientation"

到我的 list 。当声明 Activity 时,每个 View 都设置了正确的方向(例如使用 ScreenOrientation = ScreenOrientation.Portrait)。我错过了什么吗?

提前致谢!

大卫

最佳答案

我意识到,当您通过设置 ScreenOrientation = ScreenOrientation.Portrait(例如)指定 Activity 的方向时,旋转(windowManager.DefaultDisplay.Rotation)始终为零,因为屏幕内容没有相对于设备 - 无论设备的物理方向如何。

因此,为了解决我的问题,我删除了 Activity 的 ScreenOrientation 设置。这意味着当设备旋转时,内容也会旋转(根据默认的 Android 行为),并且当发生这种情况时,DefaultDisplay.Rotation 的值将按预期设置。这允许我在我的 OrientationEventListener、OnOrientationChanged 事件中使用以下代码:

if (app.IsPortrait && (rotation == ScreenOrientation.Landscape || rotation == ScreenOrientation.ReverseLandscape))
{
Mvx.Trace("Send message to open new view in landscape mode");
}
else if (!app.IsPortrait && (rotation == ScreenOrientation.Portrait || rotation == ScreenOrientation.ReversePortrait))
{
Mvx.Trace("Send message to close the landscape view");
}

大卫

关于android - WindowManager.DefaultDisplay.Rotation 始终为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25037093/

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