如何知道设备是左横屏还是右横屏?

3
我的应用程序有一个占满屏幕宽度的浮动搜索视图,它使用floatingsearchview库。当屏幕方向为横向时,导航栏会遮挡它,因此我想给它添加一些边距。问题是,当我将屏幕旋转到左侧横向(导航栏在右侧)时,我的浮动视图的右侧部分被导航栏遮挡,而当我将屏幕旋转到右侧横向时,左侧部分被遮盖,因此我需要一种正确的方法来确定哪一侧需要添加更多的边距。
目前我已经有了:
switch (getWindowManager().getDefaultDisplay().getRotation()) {
    case Surface.ROTATION_0:
        break;
    case Surface.ROTATION_90:
        break;
    case Surface.ROTATION_180:
        break;
    case Surface.ROTATION_270:
        break;
}

我测试了设备左转时(导航栏在右侧),Surface.ROTATION_90 的值,但我不知道所有设备是否都是这样。我似乎找不到任何文档来定义 Surface.ROTATION_90Surface.ROTATION_270 之间的区别。如果有更好的方式让系统自动调整浮动搜索栏,那就更好了。将 android:fitsSystemWindows 设置为 true 并没有帮助。

1
尝试使用getResources().getConfiguration().orientation代替getWindowManager().getDefaultDisplay().getRotation()。 - Thracian
@user1865027 你找到解决方案了吗? - Hemanth S
@Thracian 我在Jetpack Compose应用程序中寻找如何获取当前方向的方法,但除了UI(即服务中使用的辅助类)以外,您在这里的回复是唯一有效的方法。所以我想说谢谢你(虽然它间接地帮助了我 - 我的问题是弄清旋转值是否表示横向/纵向 - 因为我已经放弃尝试查询方向)。context.resources.configuration.orientation 将是通过从 LocalContext.current(即 context)派生的属性访问来解决它的方法。 - Rik
1个回答

1
根据这里的文档:
在所有设备中应该都能够正常工作,也就是说,如果设备逆时针旋转90度,则为了补偿渲染会顺时针旋转90度,因此此处返回的值将是Surface.ROTATION_90。
当然,ROTATION_270是相反的方向(右)。但ROTATION_90/270不一定意味着横屏模式,因此如果您还想知道当前方向,您也应该检查当前方向。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接