gpt4 book ai didi

android - 运动布局 : MotionScene OnClick overrides setOnClickListener

转载 作者:行者123 更新时间:2023-12-04 23:36:13 26 4
gpt4 key购买 nike

我刚开始玩MotionLayout .我使用 MotionLayout 定义了一个 Activity 布局使用 MotionScene隐藏和显示 View 。
MotionScene过渡看起来像这样:

<Transition
app:constraintSetStart="@id/collapsed"
app:constraintSetEnd="@id/expanded">

<OnClick app:target="@id/nextButton" />

</Transition>

麻烦的是,当我以编程方式将 ClickListener 添加到按钮时,什么也没有发生:
nextButton.setOnClickListener {
//do some stuff
}

此监听器被完全忽略,但每次单击都会触发转换( View 展开/折叠)。我在哪里看到有人 extends MotionLayout处理点击事件,但似乎有一种更简单的方法可以为按钮添加另一个点击监听器。

问题 1:有没有办法在 MotionLayout 过渡中将 ClickListener 添加到 OnClick 的目标?

问题 2:有没有办法让转换成为一次性事件?
期望的结果是,如果在单击按钮时 View 是折叠的,则 View 会展开,但如果它已经展开,则它会保持展开状态。

最后,我使用了命名空间 "http://schemas.android.com/apk/res-auto"和文档 clearly声明 targetmode是 OnClick 的属性。但是当我使用 mode 时项目不会编译因为在该命名空间中找不到它。

问题 3:我是否使用了正确的命名空间?

最佳答案

  • 不是我能找到的。
  • 我发现使用带有“transitionToEnd”值的 clickAction 属性取得了成功。这将使运动布局无法返回到 startConstraintSet。
  • <OnClick
    motion:targetId="@+id/rateUsButton"
    motion:clickAction="transitionToEnd"/>
  • 这就是我正在使用的命名空间,以及我见过的示例中使用的命名空间。

  • 今天刚遇到同样的问题。我能够使用 setOnTouchListener 拦截点击而不是 setOnClickListener在我的代码中。
    rateUsButton.setOnTouchListener { _, event ->
    if (event.action == MotionEvent.ACTION_UP) {
    // handle the click
    }
    false
    }

    我知道这个解决方案不是最好的,但我没有找到其他选择。返回 false 表示此处未处理触摸,因此将由运动布局处理。

    关于android - 运动布局 : MotionScene OnClick overrides setOnClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55603808/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com