在约束布局中使两个视图共享点击反馈

Make Two Views Share Click Feedback in Constraint Layout

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

谁能告诉我如何在约束布局中做到这一点?谢谢。

看看performClick()

performClick

boolean performClick ()

Call this view's OnClickListener, if it is defined. Performs all normal actions associated with clicking: reporting accessibility event, playing a sound, etc.

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

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

我会使用另一个封闭的视图组,除非您有不这样做的要求。我只是看起来更容易。

在ConstraintLayout中使用Group概念参考:https://developer.android.com/reference/android/support/constraint/Group ,https://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.
            })