2012-11-27 54 views
4

是否可以通過定位ParentLayout來禁用佈局內所有視圖的Touch事件。我知道這可以通過瀏覽佈局中包含的每個單獨的視圖來實現,但是如果有一種方法可以完成佈局,這將非常有幫助。我已經嘗試了以下,但都是徒勞的。禁用/過濾佈局的任何觸摸事件

ParentLayout.setClickable(false); 

ParentLayout.onFilterTouchEventForSecurity(event); 

ParentLayout.onTouchEvent(event); 

ParentLayout.setOnTouchListener(l); 
... 

和其他類似的方式。任何幫助將不勝感激。

回答

4
  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並禁用每個人的觸摸事件。

+0

爲了實現infinte滾動,我ViewPager具有非常大的項目數。 2147483647準確。此代碼可能會經歷所有這些項目,並且不可行。 OMG! – Shakti

+1

OMG! 2147483647沒有意見。 – MKJParekh

+0

全部不會立即激活,只需要立即激活並刪除。這個數字只是爲視圖保留的位置數量。這就是爲什麼我一直在尋找一件事情。 – Shakti