点击事件
1 2 3 4 5 6
| Button ( onClick = { }) { }
|
Modifier.clickable
非Button处理点击事件
1 2 3 4 5
| Box( modifier = Modifier.clickable { } )
|
Modifier.combinedClickable
在单击事件之外,同时可以处理双击,长按等点击事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Box( modifier = Modifier .combinedClickable( onClick = { }, onDoubleClick = { }, onLongClick = { } ) )
|
pointerInput 是 Compose 中处理所有手势事件的入口,类似传统视图的 onTouch 。
在这里可以识别 click 手势,而且相应优先级高于 clickable,但是不会触发水波纹之类的效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Box( modifier = Modifier .pointerInput(Unit) { detectTapGestures( onDoubleTap = { }, onLongPress = { }, onPress = { }, onTap = { } ) }, )
|
点击不显示涟漪效果
默认只要是点击的就会产生涟漪效果,这有时候和我们的页面不太搭,这里就禁用该效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import android.annotation.SuppressLint import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.composed
@SuppressLint("ModifierFactoryUnreferencedReceiver") inline fun Modifier.noRippleClickable(crossinline onClick: ()->Unit): Modifier = composed { clickable(indication = null, interactionSource = remember { MutableInteractionSource() }) { onClick() } }
|
使用方式
1 2 3 4
| Modifier .noRippleClickable() { callback(mList[it].appgroupid, it) }
|
也就是把之前的clickable换为noRippleClickable即可。