Android screenOrientation API 18 - “nosensor” vs “locked”,“unspecified” vs “user” vs “fullUser”

Posted

技术标签:

【中文标题】Android screenOrientation API 18 - “nosensor” vs “locked”,“unspecified” vs “user” vs “fullUser”【英文标题】:Android screenOrientation API 18 - "nosensor" vs "locked", and "unspecified" vs "user" vs "fullUser" 【发布时间】:2013-07-27 17:52:32 【问题描述】:

Jelly Bean 4.3 (API 18) 添加了几个新的 screenOrientation 值。

http://developer.android.com/reference/android/R.attr.html#screenOrientation

http://developer.android.com/reference/android/content/pm/ActivityInfo.html#SCREEN_ORIENTATION_BEHIND

我首先想:“方向”和“旋转”之间有区别吗?还是文档只是使用了不一致的措辞?

然后:

未指定

未指定偏好:让系统决定最佳方向。这将是下面的活动选择的方向,或者如果此活动是任务的底部,则用户的首选方向。如果用户通过设置基于传感器的设备旋转显式关闭基于传感器的方向,则将被忽略。如果不是默认情况下,将考虑基于传感器的方向,并且方向将根据用户旋转设备的方式而改变。对应于 SCREEN_ORIENTATION_UNSPECIFIED。

用户

使用用户当前首选的手机方向。对应于 SCREEN_ORIENTATION_USER。

fullUser(新)

尊重用户基于传感器的旋转偏好,但如果启用了基于传感器的旋转,则无论设备通常会做什么(例如某些设备通常不会使用 180度数旋转)。对应于 SCREEN_ORIENTATION_FULL_USER。

有什么区别?在目前的实践中,我相信setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) 是告诉活动基于传感器旋转的方式,如果在系统范围内启用了旋转。那么fulluser 有什么不同呢?

同样,

无传感器

始终忽略方向传感器确定的方向:当用户移动设备时,显示屏不会旋转。对应于 SCREEN_ORIENTATION_NOSENSOR。

锁定(新)

屏幕被锁定为其当前旋转,不管是什么。对应于 SCREEN_ORIENTATION_LOCKED。

有什么不同吗?

【问题讨论】:

【参考方案1】:

“方向”和“旋转”有区别吗?或者是 只是使用了不一致的措辞?

即使您将OrientationRotation 视为同义词(我认为大多数人也是如此,包括我在内),但区别在于它们各自的定义。 Orientation 为您提供两种选择,Rotation 为您提供四种选择。额外的两个选项将用于什么?这取决于你。

假设您想出了一个方便的应用程序,其中包括一个闹钟、一个计算器、一个天气预报器和一个货币转换器。您可以为每个视图分配不同的旋转,并允许用户通过旋转设备在四个视图之间导航。

另一个(虚构的)示例是主屏幕,它根据旋转角度显示不同的小部件组。

我尝试了一些screenOrientation 选项,这就是我发现的:

fullUser:坚持默认的 0 度旋转。

用户:允许的旋转值 0、90 和 270。

fullSensor:允许所有 4 个旋转值。

未指定:与user 设置相同的行为

锁定且无传感器:卡在 0 度旋转

正如您从测试中看到的那样,对于每个 screenOrientation 值的作用并没有太多说明。不知道为什么我无法重现资源页面上定义的效果。

【讨论】:

【参考方案2】:

fullUser:启用自动旋转时允许的旋转值 0、90、180 和 270,否则为默认值。

user:启用自动旋转时允许的旋转值 0、90 和 270,否则为默认值。但在某些平板电脑上,它也允许有 4 个方向...

@Vikram 当你的 fullUser 只有 0 级时,我猜你正在使用设备 apilevel

【讨论】:

以上是关于Android screenOrientation API 18 - “nosensor” vs “locked”,“unspecified” vs “user” vs “fullUser”的主要内容,如果未能解决你的问题,请参考以下文章

在 AndroidManifest 中:期待 android:screenOrientation="unspecified"

android文档 :screenOrientation launchMode configChanges windowSoftInputMode

android:screenOrientation="sensorLandscape" 显示最小 SDK 为 2.2 的项目的错误

Android screenOrientation API 18 - “nosensor” vs “locked”,“unspecified” vs “user” vs “fullUser”

Android 禁止屏幕旋转

Android 应用程序一直处于竖屏模式(又称肖像模式)