【问题标题】:Disable/filter any touch event for a Layout禁用/过滤布局的任何触摸事件
【发布时间】:2012-11-27 06:09:34
【问题描述】:

是否可以通过定位 ParentLayout 来禁用布局内所有视图的触摸事件。我知道这可以通过浏览布局中包含的每个单独的视图来实现,但是如果有办法为完整的布局做到这一点,那将非常有帮助。我已经尝试了以下方法,但都是徒劳的。

ParentLayout.setClickable(false);

ParentLayout.onFilterTouchEventForSecurity(event);

ParentLayout.onTouchEvent(event);

ParentLayout.setOnTouchListener(l);
... 

和其他类似的方式。任何帮助将不胜感激。

【问题讨论】:

    标签: android android-layout touch-event


    【解决方案1】:
    1. 禁用父视图中的所有触摸事件。 dispatchTouchEvent()onInterceptTouchEvent()都可以达到这个目的。
    2. android:duplicateParentState="true" 设置为所有子视图,并设置 家长android:enable="false"

    【讨论】:

      【解决方案2】:

      考虑采取以下方法。

       public void disableTouch(ViewGroup viewGroup) {
          int childCount = viewGroup.getChildCount();
          for (int i = 0; i < childCount; i++) {
              View view = viewGroup.getChildAt(i);
              view.setClickable(false);
              if (view instanceof ViewGroup) {
                  disableTouch((ViewGroup) view);
              }
          }
      }
      

      它将遍历所有 Child 并禁用每个 Child 的触摸事件。

      【讨论】:

      • 为了实现无限滚动,我的 ViewPager 有非常多的项目。准确地说是2147483647。这段代码可能会遍历所有这些项目并且不可行。
      • 天啊! 2147483647 的意见。!!
      • 所有都不会立即激活,只有需要的会被实例化并很快删除。这个数字只是为视图保留的位置数。这就是为什么我正在寻找可以一次性完成的东西。
      • 以相对布局为父,在不同的父布局上有一个透明的图像视图,并捕捉点击它而不是视图..:D
      • 他再也没有回来。
      猜你喜欢
      • 1970-01-01
      • 2011-02-27
      • 2013-04-22
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      相关资源
      最近更新 更多