使两个视图共享单击约束布局中的反馈

问题描述 投票:0回答:2

我有这种情况,我有一个约束布局。其中有两个观点。 ImageView和TextView。当单击这些视图中的任何一个时,我希望两者都产生反馈(textview中的文本颜色更改和imageview中的可绘制色调)但我似乎无法想到这样做的方法,除非我将它们放在另一个视图组中。

有人能告诉我如何在约束布局中完成这项工作吗?谢谢。

android-layout android-constraintlayout
2个回答
0
投票

看看performClick()

performClick

boolean performClick()

调用此视图的OnClickListener(如果已定义)。执行与点击相关的所有正常操作:报告辅助功能事件,播放声音等。

我们的想法是,当单击一个视图时,您的代码将在另一个视图上调用performClick()。如果两个视图执行相同的功能,则必须确保禁止任何重复操作。

除了在代码中执行此操作外,我不知道使用XML的方法。在Group中有ConstraintLayout的概念,但这只是一种控制组成员可见性的方法,并没有扩展到其他属性。

我会使用另一个封闭视图组,除非你有要求不这样做。我似乎更容易。


0
投票

在ConstraintLayout中使用Group概念参考:https://developer.android.com/reference/android/support/constraint/Grouphttps://riggaroo.co.za/constraintlayout-guidelines-barriers-chains-groups/

在java中

 Group group = findViewById(R.id.group);
        int refIds[] = group.getReferencedIds();
        for (int id : refIds) {
            findViewById(id).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // your code here.
                }
            });
        }

科特林:

        fun Group.setAllOnClickListener(listener: View.OnClickListener?) {
                referencedIds.forEach { id ->
                    rootView.findViewById<View>(id).setOnClickListener(listener)
                }
            }
        Then call the function on the group:

            group.setAllOnClickListener(View.OnClickListener {
                // your code here.
            })
© www.soinside.com 2019 - 2024. All rights reserved.