在react-native中控制可触摸区域

gpnt7bae  于 2023-03-31  发布在  React
关注(0)|答案(4)|浏览(194)

我有一个正方形的TouchableOpacity按钮,它的图形只是中间的一个小点图标,其余部分是透明的背景。我发现在许多Android设备中,按下它是相当困难的,因为显然只有不透明的区域是可触摸的,其余部分都不是。
那么,有没有什么方法可以控制TouchableOpacity或其他类似按钮的兄弟的可触摸区域?

fcg9iug3

fcg9iug31#

您可以使用View#hitSlop属性来增加可触摸区域。这在您知道增加的触摸区域不会与其他可触摸区域重叠的情况下很有用。
一个更健壮的解决方案是使用padding样式属性。Touchable*组件的可触摸区域包括元素的填充。

0kjbasz6

0kjbasz62#

我只是添加了一些代码以方便参考:

<View style={Styles.buttonStyle}>
    <TouchableOpacity onPress={onBtn1Pressed} hitSlop={{top: 20, bottom: 20, left: 50, right: 50}}>
        <Text style={Styles.textStyle}>
           Button text
         </Text>
    </TouchableOpacity>
</View>

其中父按钮容器具有以下样式。由于宽度为150,因此我将左和右设置为50以增加可单击区域。

buttonStyle:{
    alignItems:'center',
    backgroundColor: '#F92660',
    width:150,
    height:50,
    marginTop:20,
    marginBottom:10,
    marginRight:15,
    padding:5,
  },
li9yvcax

li9yvcax3#

我遇到了同样的问题,我的抽屉图标可以从标题中的任何地方触摸。我解决了这个问题,简单地为抽屉图标添加了一个新的视图,并添加了图标及其属性。

之前

return (
      <View style={styles.header}>
        <StatusBar backgroundColor="transparent" translucent={true} />
        <TouchableOpacity
          style={styles.trigger}
          onPress={() => {
            this.props.navigation.goBack();
          }}
        >
            <Ionicons name="arrow-back" size={35} color={"grey"} />
        </TouchableOpacity>
      </View>
    );
  }
}

之后

return (
      <View style={styles.header}>
        <StatusBar backgroundColor="transparent" translucent={true} />
        <TouchableOpacity
          style={styles.trigger}
          onPress={() => {
            this.props.navigation.goBack();
          }}
        >
          <View style={{ width: 40, height: 40 }}>
            <Ionicons name="arrow-back" size={35} color={"grey"} />
          </View>
        </TouchableOpacity>
      </View>
    );
  }
}
z18hc3ub

z18hc3ub4#

如果你使用的是新推荐的Pressable组件 Package 器,你可以使用hitSlop来增加按钮的可按区域。
下面是你如何使用它

<Pressable
   onPress={() =>
   someFunction()}
   hitSlop={
   {
   left: 100, // To increase press area on the left side
   right: 100,// To increase press area on the right side
   bottom: undefined,
   top: undefined
   }}
   > 
   <Text>Press me </Text>
</Pressable>

相关问题