【问题标题】:Disable click listener for invisible viewgroup禁用不可见视图组的单击侦听器
【发布时间】:2020-05-28 21:07:20
【问题描述】:

在某些情况下,我有一个 View.INVISIBLE 的视图组。在这种状态下,我希望视图组或其子视图不响应任何点击事件。

根据android中View.INVISIBLE的默认实现,即使视图组的可见性不可见,视图组内的子视图仍然可以点击。我知道我可以将可见性设置为View.GONE,但我不希望删除整个视图组。

我尝试在视图组上将setClickable 设置为true,但它不起作用,子视图仍在响应点击。我不想遍历视图组中的所有视图并单独禁用它们,因为这是我经常要做的事情。

有没有更好的方案来阻止视图组中的所有子视图接收点击事件?

【问题讨论】:

  • 尝试在视图组上设置一个无操作触摸监听器。
  • 子视图仍然能够接收点击事件。
  • 您必须返回true 才能使用该事件。
  • 你的意思是myViewGroup.setOnTouchListener { _, _ -> true }
  • 是的。请查看stackoverflow.com/questions/5418510的答案

标签: android android-layout android-view


【解决方案1】:

也许你可以试试'setOnClickListener'。

viewgroup.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true; // return true can intercept click event go down
        }
    });

并且你想接收视图组点击事件。

viewgroup.setOnTouchListener(null)

【讨论】:

    【解决方案2】:

    你试过setEnabled(false)吗?

    如果这不起作用,您可以像这样将所有视图子项设置为禁用:

    LinearLayout layout = (LinearLayout) findViewById(R.id.my_layout);
    for (int i = 0; i < layout.getChildCount(); i++) {
        View child = layout.getChildAt(i);
        child.setEnabled(false);
    }
    

    【讨论】:

    • 我刚刚看到你不想遍历所有视图,所以那是我的错。
    • 啊……好吧。没问题。 setEnabled(false) 不起作用。
    【解决方案3】:

    尝试旧方法。

    viewgroup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(viewgroup.getVisibility() == View.INVISIBLE)
                    return;
            }
        });
    

    【讨论】:

      猜你喜欢
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多