Expo ScreenOrientation
用于管理设备屏幕方向的通用库。
屏幕方向是指图形在设备上显示的方向。例如,下图显示的设备在垂直和水平的物理方向上,但屏幕方向为纵向。有关设备物理方向,请参阅 设备运动 的方向部分。
🌐 Screen Orientation is defined as the orientation in which graphics are painted on the device. For example, the figure below has a device in a vertical and horizontal physical orientation, but a portrait screen orientation. For physical device orientation, see the orientation section of Device Motion.
在 Android 和 iOS 平台上,屏幕方向的更改将覆盖任何系统设置或用户偏好。在 Android 上,可以在考虑用户首选方向的情况下更改屏幕方向。在 iOS 上,应用无法访问用户和系统设置,任何屏幕方向的更改都会覆盖现有设置。
🌐 On both Android and iOS platforms, changes to the screen orientation will override any system settings or user preferences. On Android, it is possible to change the screen orientation while taking the user's preferred orientation into account. On iOS, user and system settings are not accessible by the application and any changes to the screen orientation will override existing settings.
网络有有限支持。
安装
🌐 Installation
- npx expo install expo-screen-orientationIf you are installing this in an existing React Native app, make sure to install expo in your project.
警告
🌐 Warning
苹果在 iOS 9 中为 iPad 添加了对拆分视图模式的支持。这改变了系统处理屏幕方向的方式。简而言之,对于 iOS,除非你并排打开两个应用,否则你的 iPad 始终处于横向模式。要使用此模块锁定屏幕方向,你需要禁用对该功能的支持。有关拆分视图模式的更多信息,请查阅苹果官方文档。
🌐 Apple added support for split view mode to iPads in iOS 9. This changed how the screen orientation is handled by the system. To put the matter shortly, for iOS, your iPad is always in landscape mode unless you open two applications side by side. To be able to lock screen orientation using this module you will need to disable support for this feature. For more information about the split view mode, check out the official Apple documentation.
应用配置中的配置
🌐 Configuration in app config
如果你在项目中使用配置插件(连续原生生成 (CNG)),你可以使用其内置的 配置插件 来配置 expo-screen-orientation。该插件允许你配置一些无法在运行时设置的属性,这些属性需要构建新的应用二进制文件才能生效。如果你的应用不使用 CNG,那么你需要手动配置该库。
🌐 You can configure expo-screen-orientation using its built-in config plugin if you use config plugins in your project (Continuous Native Generation (CNG)). The plugin allows you to configure various properties that cannot be set at runtime and require building a new app binary to take effect. If your app does not use CNG, then you'll need to manually configure the library.
Example app.json with config plugin
{ "expo": { "ios": { "requireFullScreen": true }, "plugins": [ [ "expo-screen-orientation", { "initialOrientation": "DEFAULT" } ] ] } }
Configurable properties
| Name | Default | Description |
|---|---|---|
initialOrientation | 未定义 | Only for: iOS 设置 iOS 的初始屏幕方向。可能的值: |
Are you using this library in an existing React Native app?
- 在 Xcode 中使用
xed ios打开 ios 目录。如果你没有该目录,请运行npx expo prebuild -p ios来生成一个。 - 在 Xcode 中勾选
Requires Full Screen复选框。它应该位于 Project Target > General > Deployment Info 下。
应用接口
🌐 API
import * as ScreenOrientation from 'expo-screen-orientation';
Methods
Gets the current screen orientation.
Promise<Orientation>Returns a promise that fulfils with an Orientation
value that reflects the current screen orientation.
Gets the current screen orientation lock type.
Promise<OrientationLock>Returns a promise which fulfils with an OrientationLock
value.
Gets the platform specific screen orientation lock type.
Promise<PlatformOrientationInfo>Returns a promise which fulfils with a PlatformOrientationInfo
value.
| Parameter | Type | Description |
|---|---|---|
| orientationLock | OrientationLock | The orientation lock to apply. See the |
Lock the screen orientation to a particular OrientationLock.
Promise<void>Returns a promise with void value, which fulfils when the orientation is set.
Example
async function changeScreenOrientation() { await ScreenOrientation.lockAsync(ScreenOrientation.OrientationLock.LANDSCAPE_LEFT); }
| Parameter | Type | Description |
|---|---|---|
| options | PlatformOrientationInfo | The platform specific lock to apply. See the |
Promise<void>Returns a promise with void value, resolving when the orientation is set and rejecting
if an invalid option or value is passed.
| Parameter | Type |
|---|---|
| orientationLock | OrientationLock |
Returns whether the OrientationLock policy is supported on
the device.
Promise<boolean>Returns a promise that resolves to a boolean value that reflects whether or not the
orientationLock is supported.
Sets the screen orientation back to the OrientationLock.DEFAULT policy.
Promise<void>Returns a promise with void value, which fulfils when the orientation is set.
Event Subscriptions
| Parameter | Type | Description |
|---|---|---|
| listener | OrientationChangeListener | Each orientation update will pass an object with the new |
Invokes the listener function when the screen orientation changes from portrait to landscape
or from landscape to portrait. For example, it won't be invoked when screen orientation
change from portrait up to portrait down, but it will be called when there was a change from
portrait up to landscape left.
EventSubscription| Parameter | Type | Description |
|---|---|---|
| subscription | EventSubscription | A subscription object that manages the updates passed to a listener function on an orientation change. |
Unsubscribes the listener associated with the Subscription object from all orientation change
updates.
voidRemoves all listeners subscribed to orientation change updates.
voidInterfaces
A subscription object that allows to conveniently remove an event listener from the emitter.
Types
| Property | Type | Description |
|---|---|---|
| orientationInfo | ScreenOrientationInfo | The current |
| orientationLock | OrientationLock | The current |
| Property | Type | Description |
|---|---|---|
| screenOrientationArrayIOS(optional) | Orientation[] | Only for: iOS An array of orientations to allow on the iOS platform. |
| screenOrientationConstantAndroid(optional) | number | Only for: Android A constant to set using the Android native API.
For example, in order to set the lock policy to unspecified,
|
| screenOrientationLockWeb(optional) | WebOrientationLock | Only for: Web A web orientation lock to apply in the browser. |
| Property | Type | Description |
|---|---|---|
| horizontalSizeClass(optional) | SizeClassIOS | Only for: iOS The horizontal size class of the device. |
| orientation | Orientation | The current orientation of the device. |
| verticalSizeClass(optional) | SizeClassIOS | Only for: iOS The vertical size class of the device. |
Enums
Orientation.UNKNOWN = 0An unknown screen orientation. For example, the device is flat, perhaps on a table.
An enum whose values can be passed to the lockAsync
method.
Note:
OrientationLock.ALLandOrientationLock.PORTRAITare invalid on devices which don't supportOrientationLock.PORTRAIT_DOWN.
OrientationLock.DEFAULT = 0The default orientation. On iOS, this will allow all orientations except Orientation.PORTRAIT_DOWN.
On Android, this lets the system decide the best orientation.
OrientationLock.OTHER = 8A platform specific orientation. This is not a valid policy that can be applied in lockAsync.
OrientationLock.UNKNOWN = 9An unknown screen orientation lock. This is not a valid policy that can be applied in lockAsync.
Each iOS device has a default set of size classes that you can use as a guide when designing your interface.
An enum representing the lock policies that can be applied on the web platform, modelled after
the W3C specification.
These values can be applied through the lockPlatformAsync
method.