2017 年更新:{"orientation": "portrait"}
目前许多官方 React Native 指南,如 this one 建议在构建 React Native 应用程序时使用 Expo,因此除了现有答案之外,我还将添加一个值得注意的 Expo 特定解决方案,因为它适用于 iOS 和 Android 以及您只需设置一次,无需乱用 XCode 配置、AndroidManifest.xml 等。
在构建时设置方向:
如果您正在使用 Expo 构建您的 React Native 应用程序,那么您可以在您的 app.json 文件中使用 orientation 字段 - 例如:
{
"expo": {
"name": "My app",
"slug": "my-app",
"sdkVersion": "21.0.0",
"privacy": "public",
"orientation": "portrait"
}
}
可以设置为"portrait"、"landscape"或"default",表示不锁定方向自动旋转。
在运行时设置方向:
您也可以在运行时通过运行覆盖该设置,例如:
Expo.ScreenOrientation.allow(Expo.ScreenOrientation.Orientation.LANDSCAPE);
参数可以在哪里:
-
ALL — 所有 4 种可能的方向
-
ALL_BUT_UPSIDE_DOWN — 除了反向纵向,在某些 Android 设备上可能是全部 4 个方向。
-
PORTRAIT — 纵向,在某些 Android 设备上也可以是反向纵向。
-
PORTRAIT_UP — 仅限正面肖像。
-
PORTRAIT_DOWN — 仅限倒置肖像。
-
LANDSCAPE — 任意横向。
-
LANDSCAPE_LEFT — 仅限左侧横向。
-
LANDSCAPE_RIGHT — 仅限右侧风景。
检测旋转:
当您允许多个方向时,您可以通过侦听Dimensions 对象上的change 事件来检测更改:
Dimensions.addEventListener('change', (dimensions) => {
// you get:
// dimensions.window.width
// dimensions.window.height
// dimensions.screen.width
// dimensions.screen.height
});
或者您也可以随时使用Dimensions.get('window') 和Dimensions.get('screen') 获取尺寸,如下所示:
const dim = Dimensions.get('window');
// you get:
// dim.width
// dim.height
或:
const dim = Dimensions.get('screen');
// you get:
// dim.width
// dim.height
当您收听该事件时,您会同时收到 window 和 screen,这就是您以不同方式访问它的原因。
文档:
更多信息见: