如何使用 React Native tvOS / Android TV 正确处理导航堆栈

Posted

技术标签:

【中文标题】如何使用 React Native tvOS / Android TV 正确处理导航堆栈【英文标题】:How to properly handle a navigation stack with React Native tvOS / Android TV 【发布时间】:2020-01-18 18:55:50 【问题描述】:

我正在使用 react-native-tvos 构建一个 tvOS 和 Amazon FireStick 应用程序。但是我遇到了反应导航的问题。添加到导航堆栈的屏幕在后台仍处于活动状态。这会导致焦点引擎混淆。使用遥控器上的方向键,焦点将在堆栈底部的不可见屏幕和当前显示的屏幕之间切换。我正在寻找有关如何解决此问题的建议。

我读到其他人在使用 react-navigation 和 react-native-navigation 时遇到过这个问题。但我没有找到解决办法。

【问题讨论】:

【参考方案1】:

如果您使用的是react-native-tvos 版本,请在他们的仓库中关注this issue。

至于临时解决方案,我建议您自己隐藏您的内容。 看看我的实现:

import React from "react";
import  View  from "react-native";

// That's a HOC to know when the current Screen is focused
import withScreenFocusing from "../components/HOC/WithScreenFocusing";

const FocusHider = ( isFocused, children ) => 
  return (
    <View style= display: isFocused ? "flex" : "none" >children</View>
  );
;

export default withScreenFocusing(FocusHider);

然后这样使用它:

 <FocusHider>
   <YourAwesomeContent />
 </FocusHider>

以防万一,我提到的 HOC 只是来自 @react-navigation/nativeuseIsFocused

【讨论】:

【参考方案2】:

我一直在从事 androidTV 项目,但遇到了的焦点问题 也反应原生导航。 当我导航到其他屏幕时,Touchable 组件的焦点被忽略。 我设法通过添加 react-native-screens 包(其中 react-native-navigation 将其定义为必须依赖项)来解决这个问题,然后在我的 app.js 中添加:

import enableScreens from 'react-native-screens';
enableScreens();

那么焦点已经按预期恢复工作了。

我希望它对你有用。

【讨论】:

我有一个问题,返回到屏幕时的焦点总是转到第一个可触摸组件,而不是触发第二个屏幕显示的组件。你能帮帮我吗?

以上是关于如何使用 React Native tvOS / Android TV 正确处理导航堆栈的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 tvOS 和 Android TV 之间的 React Native 应用程序中的缩放问题?

在 React Native 中获取广告 id

如何将 react-native-flux 与 react-drawer 一起使用

React-native:如何在 React-native 中使用(和翻译)带有 jsx 的 typescript .tsx 文件?

如何在 React Native 中使用 React Native Video 显示多个视频? [关闭]

如何在React Native中使用CreateBottomTabNavigator?