在 Android 电视上禁用默认焦点行为

Disable default focus behaviour on Android TV

我们已经在 Android 电视上构建了自定义焦点管理器,不幸的是,我们找不到禁用默认焦点行为的方法。 当我们将元素放入 ScrollView 时,问题就出现了。正在滚动视图以跟随默认焦点指针。问题是我们的 focusManager 以不同的方式工作,它与默认的不同步,导致视图从我们的焦点项上移开。

我们尝试了以下方法:

似乎没有任何效果。

我们正在使用 RN 0.59.10

我找到了一种方法。这有点老套,但效果很好。 我意识到默认焦点转到它可以找到的第一个 ScrollView 并且永远不会离开它。这给了我将焦点捕获在无尺寸组件中的想法,因此我创建了一个名为 FocusTrap 的组件并将其放置在我的根视图之上。

import React from "react";
import { View, ScrollView, StyleSheet, TouchableOpacity } from "react-native";

const styles = StyleSheet.create({
  container: { flex: 1, width: 0, height: 0, flexShrink: 1, flexGrow: 0 },
});

export const FocusTrap = (props) => {
  return (
    <View style={styles.container}>
      <ScrollView>
        <TouchableOpacity />
      </ScrollView>
    </View>
  );
};

它有效地将默认焦点捕获在内部,因此我可以自由接管焦点行为。