如何修改Jetpack Compose中detectTapGestures的长按超时时间?
修改Jetpack Compose长按触发超时的方法
默认的detectTapGestures使用系统ViewConfiguration的长按超时时间,而该配置的属性是只读的,无法直接修改。你可以通过自定义ViewConfiguration并传入pointerInput的方式覆盖默认超时:
创建自定义ViewConfiguration实例
用remember缓存自定义配置,仅覆盖需要修改的longPressTimeoutMillis,其他属性沿用系统默认值:val customViewConfig = remember { object : ViewConfiguration { override val longPressTimeoutMillis: Long = 2000 // 设置为2秒触发长按 override val doubleTapTimeoutMillis: Long = ViewConfiguration.getDefaultDoubleTapTimeoutMillis() override val doubleTapMinTimeMillis: Long = ViewConfiguration.getDefaultDoubleTapMinTimeMillis() override val touchSlop: Float = ViewConfiguration.getDefaultTouchSlop() override val minimumTouchTargetSize: Int = ViewConfiguration.getDefaultMinimumTouchTargetSize() override val tapTimeoutMillis: Long = ViewConfiguration.getDefaultTapTimeoutMillis() override val tapSlop: Float = ViewConfiguration.getDefaultTapSlop() override val hoverTapTimeoutMillis: Long = ViewConfiguration.getDefaultHoverTapTimeoutMillis() override val hoverTapSlop: Float = ViewConfiguration.getDefaultHoverTapSlop() override val scaledTouchSlop: Float = ViewConfiguration.getDefaultScaledTouchSlop() } }在pointerInput中传入自定义配置
将自定义的ViewConfiguration作为参数传给pointerInput,内部的detectTapGestures就会使用这个配置的超时时间:Box( modifier = Modifier .size(200.dp) .background(Color.Gray) .pointerInput(customViewConfig) { detectTapGestures( onLongPress = { // 自定义超时后的长按逻辑 println("长按触发") } ) } ) { Text(text = "长按测试") }
原理:pointerInput的参数会决定作用域内viewConfiguration的实例,传入自定义配置后,手势检测逻辑会读取该配置的longPressTimeoutMillis作为触发阈值。
内容的提问来源于stack exchange,提问作者gaugeinvariante
相关产品推荐
相关产品推荐

