Compose 去除点击水波纹阴影效果_局部and全局去除-CompositionLocal实例

问题1:compose view 的点击默认有阴影效果,实际开发中要求去除?

问题2:实际开发中,要求去掉点击效果,不单单是一个view,肯定是整个界面,甚至是整个应用,如何全局去除默认的点击效果?

           // 举例代码,默认有点击阴影效果
            Column(horizontalAlignment = Alignment.CenterHorizontally) {
                Image(
                    painterResource(R.drawable.ic_toolbar_search),
                    contentDescription = null,
                    modifier = Modifier
                        .size(60.dp)
                        .clickable(
                            onClick = { model.count() })
                )
                Text(
                    text = "compose textView"
                )
                Text(
                    text = "compose textView2"
                )
            }

解决办法:

一:针对单个view,去除点击效果,可以在clickable 中添加indication = null, interactionSource = remember { MutableInteractionSource() }

            // 举例代码,局部去除点击阴影效果
            Column(horizontalAlignment = Alignment.CenterHorizontally) {
                Image(
                    painterResource(R.drawable.ic_toolbar_search),
                    contentDescription = null,
                    modifier = Modifier
                        .size(60.dp)
                        .clickable(
                            onClick = { model.count() },
                            // 去除点击效果
                            indication = null,
                            interactionSource = remember {
                                MutableInteractionSource()
                            })
                )
                Text(
                    text = "compose textView"
                )
                Text(
                    text = "compose textView2"
                )
            }

   

  二:针对整个Activity,你可以在最root的compose里设置,通过CompositionLocal(让数据流经界面树的一种隐式方式),属性传递,把children就全部替换了

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            // Composable 根源view,一般用来设置主题
            ComposeTheme() {
                // data
                mViewModel = AboutViewModel()
                initData()
                
                //view
                AboutView(this, mViewModel, goBack = { goBack() })
                ShowCustomDialog(mViewModel, startDebug = { mViewModel.startDebug(this) })
            }
        }
    }
@Composable
fun ComposeTheme(
    content: @Composable () -> Unit
) {
    MaterialTheme(colors = LightColorPalette) {
        
        // 设置全局参数,去除默认点击效果
        CompositionLocalProvider(
            LocalIndication provides NoIndication
        ) {
            ProvideTextStyle(value = MaterialTheme.typography.body1, content = content)
        }
    }
}

// null indication
object NoIndication : Indication {
    private object NoIndicationInstance : IndicationInstance {
        override fun ContentDrawScope.drawIndication() {
            drawContent()
        }
    }

    @Composable
    override fun rememberUpdatedInstance(interactionSource: InteractionSource): IndicationInstance {
        return NoIndicationInstance
    }
}

参考 

CompositionLocal 简介_使用

猜你喜欢

转载自blog.csdn.net/ly_xiamu/article/details/125830327