React native TouchableOpacity onPress不适用于Android

React native TouchableOpacity onPress不适用于Android,android,react-native,touchableopacity,touchablehighlight,Android,React Native,Touchableopacity,Touchablehighlight,TouchabelOpacity在iOS上运行良好,但onPress方法在Android上对我来说不起作用 我的母语版本:0.57.4 我的代码: const initDrawer = navigation => ( <TouchableOpacity style={{ left: 16 }} onPress={() => onPressDrawerButton(navigation)} > <Ionicons name="ios-m

TouchabelOpacity在iOS上运行良好,但onPress方法在Android上对我来说不起作用

我的母语版本:0.57.4

我的代码:

const initDrawer = navigation => (
  <TouchableOpacity
    style={{ left: 16 }}
    onPress={() => onPressDrawerButton(navigation)}
  >
    <Ionicons name="ios-menu" color="white" size={30} />
  </TouchableOpacity>
);
const initDrawer=导航=>(
按抽屉按钮(导航)}
>
);

我也遇到了同样的问题,所有的TouchableOpacity按钮在iOS版本中都可以正常工作,但Android中有一个按钮没有启动。
我无意中发现了这一点,它提到
位置:绝对
会弄乱触发器。它解决了我的问题。

我也有类似的问题。注意从哪里导入“TouchableOpacity”。当我将“TouchableOpacity”从“react-native手势处理程序”更改为“react-native手势处理程序”时,它对我(Android平台)起到了作用。

对我来说,我使用的是NativeBase,并且具有以下结构,这在Android上被破坏了:

<List>
    <TouchableOpacity>
       <ListItem>
          <Text>Button</Text>
       </ListItem>
    </TouchableOpacity>
</List>

按钮

一旦我删除了
列表项
,并使文本成为
TouchableOpacity
的直接子项,它就起作用了。

在这样的视图中包装图标

const initDrawer = navigation => (
  <TouchableOpacity
    style={{ left: 16 }}
    onPress={() => onPressDrawerButton(navigation)}
  >
    <View style={{padding:5}}>
        <Ionicons name="ios-menu" color="white" size={30} />
    </View>
  </TouchableOpacity>
);
const initDrawer=导航=>(
按抽屉按钮(导航)}
>
);
然后,如果问题仍然存在,请使用backgroundColor设置图标样式,您将看到一半的图标没有使用backgroundColor设置样式,因此您必须为填充量增加。我不知道,但图标在音量方面往往有问题,尤其是在触摸不透明度方面。 这就是为什么我自己制作一个带有图标填充的父视图。
其他人提到的另一个问题是帖子:“绝对”道具会干扰组件的音量。

我忘了遵循Android的react native手势处理程序入门步骤:


对我来说,它可以工作,但可触摸的区域非常小。不知怎的,iOS的面积比Android的要大

我最后使用
hitSlop
属性增加了可触摸区域,如下所示:

<TouchableOpacity
    onPress={() => {}}
    hitSlop={{ top: 30, bottom: 30, left: 30, right: 30 }}
>
    <Icon name="eye" />
</TouchableOpacity>
{}
hitSlop={{顶部:30,底部:30,左侧:30,右侧:30}}
>

此处未列出我的问题,因此希望添加它

在安卓系统上,如果你的键盘里有TouchableOpacity,那么它就不起作用了(至少在我使用的设置中是这样)

当我确定键盘AvoidingView的范围仅限于输入字段而不是触摸屏时,它又开始工作了


(顺便说一句,在IOS上很好)

遇到了同样的问题。检查您的设备时间是否与其连接的机器相同。在我的例子中是1分钟的差异,这导致每个TouchableOpacity都无法工作。

在某些情况下,本机调试器在iOS和Android平台上无法正常工作,我发现在启用调试器的情况下,TouchableOpacity在Android上有触摸bug。尝试禁用此功能,它将在构建后正常工作

在我的例子中,我从“react native手势处理程序”导入了TouchableOpacity
在我从“react native”添加它之后,它工作了

终止metro服务器(如果它当前正在运行),然后再运行,这一切(如下所示)对我来说都很有效


在运行metro服务器的控制台上,通过键入

ctrl+c

然后在另一个控制台上,通过键入来运行应用程序

react原生运行android


npx react native run android

虽然以下问题是由react native的最新版本引起的,但我认为这可能是最近遇到此问题的人的修复方法

这可能是由于使用调试模式时,设备上的时间与开发计算机上的时间不匹配造成的。我通过关闭和打开设备的自动时间设置来解决这个问题,这会“重新蚀刻”时间,使它与我的开发机器同步

这个问题与此有关:


也有同样的问题-在我的例子中,它是一个在
TouchableOpacity
内部呈现的元素,具有
位置:“绝对”
,并且与
TouchableOpacity
成比例,我将
zIndex:0
添加到该元素中,使其工作。

对我来说,从所有父元素中删除“flex:1”。



<TouchableOpacity
       style={{backgroundColor: 'red', width: 50, height: 50, zIndex: 1}}
       onPress={() => alert('working')}>
       <Text>tset</Text>
 </TouchableOpacity>
警报('working')}> 采集器
zIndex:1
像魔术一样工作。

检查从中导入可触摸不透明度的库。从“react native”导入它。不是来自“反应本机手势处理程序”

用这个

import { TouchableOpacity } from 'react-native';
而不是这个

import { TouchableOpacity } from 'react-native-gesture-handler';

如果您使用的是绝对位置。使用zIndex注册TouchableOpacity的点击

touchableOpacity: {
alignItems: 'center',
justifyContent: 'center',
width: 30,
height: 25,
zIndex: 1,
position: 'absolute',
left: 5},

我可以确认它在0.57.7版本的Android上运行良好。你能负担得起升级吗?应该是答案这是实际有效的答案我建议添加eslint no restricted imports规则,禁止从react本机手势处理程序导入<代码>'no-restricted-imports':['error',{path:[{name:'react native signature handler',importNames:['touchablepacity'],消息:'Import touchablepacity from react native',},,},],
,当我从react-native切换到react-native手势处理程序时,它起到了作用。rn手势处理程序的自动导入令人难以置信地烦恼。我以类似的方式解决了我的问题。在层次结构方面,我有一个可触摸不透明的视图;我将定位添加到视图中,同时假设Touchable Opacity也会采用其子级定位,这就是我的问题所在,点击视图不会执行我的方法,因为Touchable Opacity与它的子级具有不同的定位。我通过在可触摸的不透明度而不是视图上进行定位来解决这个问题。希望这对别人有帮助。这也是我的问题。绝对位置防止onPress功能触发。谢谢你的帮助,伙计。这正是我发现的!真奇怪。“你找到这个问题的原因了吗?”@jaapweijl我想我找到了一些东西,但我仍然