代码之家  ›  专栏  ›  技术社区  ›  Archie G. Quiñones

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

  •  0
  • Archie G. Quiñones  · 技术社区  · 7 年前

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

    有人能告诉我如何在约束布局中做到这一点吗?非常感谢。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Community CDub    4 年前

    看看 performClick()

    performClick性能单击

    布尔performClick()

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

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

    除了在代码中这样做之外,我不知道有什么方法只使用XML。有一个 Group 在里面 ConstraintLayout 但这只是控制组成员可见性的一种方式,而不扩展到其他属性。

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

        2
  •  0
  •   Jithish P N    6 年前

    在ConstraintLayout中使用组概念参考: 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.
                })