javascript - react native : Allow device rotation only when webview plays video

标签 javascript android ios webview react-native

我当前的工作应用程序在整个屏幕上都被锁定在纵向模式。 该应用程序在 webview 上播放嵌入式 YouTube 视频,我只想在全屏播放时允许横向模式。

我看到原生方式有一些技巧,但我认为它们与 React Native 不兼容。我还检查了react-native-orientation但这对我没有帮助。

有没有一种简单明了的方法可以实现它?

最佳答案

我可能来晚了一点,但我最近添加了您的问题所要求的内容。

我们的目标

除非用户正在观看视频,否则应用程序应固定为纵向。观看视频时,用户应该能够在纵向和横向之间自由切换。

开始

我将概述我是如何在 iOS 中实现的,React Native 部分当然也适用于 Android。

启用所有方向

您不想启用所有方向(纵向、倒置、横向左、横向右)。

我从 Google 获取了以下图片,只需确保勾选所有复选框即可。

enter image description here

React Native 包

下载react-native-orientation在您的 index.ios.js 中,添加代码以锁定设备方向。

例如,我的在 componentWillMount 中。

componentWillMount() {
  Orientation.lockToPortrait();
}

通过 WebView 观看视频时禁用锁定

然后我有一个简单的 VideoPlayer 组件。

<TouchableWithoutFeedback onPress={this.handleClick}>
  <WebView
    source={{uri: 'https://youtube.com'}}
  />
</TouchableWithoutFeedback>

我使用了 TouchableWithoutFeedback,因为我不想让用户知道他们点击了什么。

创建一个handleClick 函数:

handleClick = () => {
  Orientation.unlockAllOrientations()
}

棘手的一点,而且很 hacky!

我找不到一种方法来判断用户何时在 WebView 中观看完视频。这是因为 iOS 使用其原生播放器。

我的 VideoPlayer 组件在 ScrollView 中(在其他组件中)。当用户滚动(观看视频后)时,应用程序将再次锁定回纵向。

<ScrollView
  onScroll={() => { Orientation.lockToPortrait(); }}
/>

注意

这将锁定所有设备,包括平板电脑。如果你只想在手机上运行它,我使用 react-native-device-info检测设备是否为平板电脑。

您可以将所有方向包装在一个 if 语句中:

if (!DeviceInfo.isTablet()) {
  Orientation.lockToPortrait();
}

关于javascript - react native : Allow device rotation only when webview plays video,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42597024/

相关文章:

ios - 像 Jamie Oliver 的食谱应用程序一样滚动页面

ios - Xcode 9.4 fatal error : lipo: can't open input file (No such file or directory)

javascript - 在呈现 CollectionView 中的所有项目后是否会触发 Marionette.js 事件?

javascript - 无论浏览器位置如何,固定背景(包括说明图片!)

javascript - 如何处理 react 中的进口 hell ?

android - 如何在没有 tabWidget View 的情况下将选项卡放入 tabHost?

android - 为什么在重新创建 Activity 时不会在 viewpager 中重新创建 fragment ?

android - 大屏幕或 hdpi 的主屏幕小部件大小?

iOS 删除键没有反应

JavaScript 处理表单,这个数组表示法是如何工作的?