在Android TV上禁用默认对焦行为

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

很遗憾,我们已经在Android TV上构建了自定义焦点管理器,我们找不到找到禁用默认焦点行为的方法。当我们将元素放在ScrollView中时,会出现问题。视图正在滚动以跟随默认焦点指针。问题在于我们的focusManager以不同的方式工作,并且与默认方式不同步,从而导致视图偏离了我们的焦点项目。

我们尝试了以下操作:

  • 删除所有Tocuahble,并用自定义类替换它们。
  • 用FlatList替换ScrollView
  • 试图设置scrollEnabled={false}
  • 试图调用preventDefault onFocus / onScroll事件。

似乎没有任何作用。

我们正在使用RN 0.59.10

enter image description here

android react-native android-tv
1个回答
0
投票

我已经找到了一种方法。这有点hacky,但效果很好。我意识到,默认焦点放在它可以找到并且永远不会离开的第一个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>
  );
};

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

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