在React Native中,我需要将方向锁定为纵向,但要旋转全屏视频

问题描述 投票:1回答:1

当前应用程序在AndroidManifest.xml中使用以下指令:

<activity
    // ...
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    android:screenOrientation="portrait"
    // ...

正在使用WebView组件显示Youtube视频:

<WebView
    height={webViewRoundedHeight}
    allowsInlineMediaPlayback={true}
    mediaPlaybackRequiresUserAction={false}
    useWebKit={true}
    allowsFullscreenVideo={true}
/>

问题是,当用户观看视频并更改为全屏模式时,设备仍被锁定为纵向。 iOS可以解决此问题,因此这仅是Android的问题。

我已经尝试将WebView属性回切到允许视频全屏显示的最低要求。这对旋转没有影响。

如果我从清单中删除ndroid:screenOrientation="portrait"指令,则可以旋转视频,但是当用户移至横向模式时,该应用程序其余部分的样式将被破坏。

该应用未使用Expo,并且是AndroidX之前的版本。由于构建失败,这似乎使我无法使用react-native-orientationreact-native-orientation-locker软件包。 (我尝试按照安装说明进行操作,但是在出现一系列越来越模糊的错误消息后,我没时间在此功能上花费了。)这也意味着我无权使用EXPO屏幕方向包装(并将expo添加到现有应用程序看起来可能会导致更多耗时的问题:Converting Existing React Native Projects to Expo]

[如果我可以使用任何方向包,则理论上我可以从清单文件中删除portrait指令,将方向锁定在代码中(根据效果的范围在App.js或单独的屏幕中),然后当用户进入全屏模式时,从Web视图内的JS发送消息。我可以在RN JS代码中捕捉到这一点并放宽方向锁定,直到用户退出全屏显示为止。但是,我一直试图创建一个可以从JS操作的锁。

最欢迎有其他想法。

react-native video android-orientation
1个回答
0
投票

我遇到了同样的问题,并且在React-Native和Youtube播放器上下文中确定,这是不可能的。因此,我们实际上需要在Objective-C代码内进行更改。

我正在使用react-native-orientation-locker软件包将我的应用锁定为Portrait。

我需要更改此功能:

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return [Orientation getOrientation]; }

to

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
  if(window != self.window && window && window.rootViewController)
  {
    UIViewController * pvc = window.rootViewController.presentedViewController;
    if(pvc)
    {
      NSString * class = NSStringFromClass([pvc class]);
      if(pvc && [class hasPrefix:@"AV"]){
        return UIInterfaceOrientationMaskAll;
      }
    }


  }
   return [Orientation getOrientation];
}

您可以更改此支票

if(pvc && [class hasPrefix:@"AV"]){

更确切地说,如果您担心其他应用程序或您不使用WkWebview,则>]

如果您不使用任何其他软件包,也可能会更改

return [Orientation getOrientation];

return UIInterfaceOrientationMaskPortrait
© www.soinside.com 2019 - 2024. All rights reserved.