2012-04-23 42 views
8

我有一個容納很多東西的FrameLayout容器(包括ScrollViewWebViewViewPager ...)。如何禁用ViewGroup的所有孩子的所有觸摸事件?

我想能夠觸發該容器上的onClick事件,但似乎有些ScrollViewWebViewViewPager攔截觸摸事件,因爲onClick事件只是當我點擊的部分觸發容器沒有任何...

如何禁用容器的所有觸摸事件的孩子,以便能夠觸發onClick的任何地方?

UPDATE

的想法是在Android 3.2的,即類似任務管理器在應用程序的當前可見屏幕顯示爲縮小的圖標,可以點擊。

感謝

回答

15

可能是我誤會了什麼,但我想回答你的問題很簡單: 如果你不想派遣沒有觸摸事件給孩子 - 所以你只需要重寫ViewGroup.onInterceptTouchEvent (MotionEvent ev)API reference這樣的:

public boolean onInterceptTouchEvent (MotionEvent ev){ 
    return true; 
} 

根據android文檔,這意味着您的ViewGroup將始終攔截所有觸摸事件,並且不會將它們發送給孩子。所有這些將被引導到您的ViewGroup的ViewGroup.onTouchEvent(MotionEvent ev)方法。

0

你可以像這樣禁用它們:

FrameLayout parent = (FrameLayout)findViewById(some_id); 
disableChildsOnTouch(parent) 


public void disableChildsOnTouch(ViewGroup viewGroup){ 
    int cnt = viewGroup.getChildCount(); 
    for (int i = 0; i < cnt; i++){ 
     View v = viewGroup.getChildAt(i); 
     if (v instanceof ViewGroup){ 
      disableChildsOnTouch((ViewGroup)v); 
     } else { 
      v.setOnTouchListener(null); 
      v.setOnClickListener(null); 
      //v.SETYOURLISTENER(null) 
     } 
    } 
} 
+0

ScrollView仍然滾動,並且當禁用所有的孩子時仍然沒有觸發容器onClick ... :( – jul 2012-04-23 13:29:57

+0

不應該scrollView滾動?如果不是,你可以測試上面的View v,如果它是一個scrollView並且禁用我不能告訴你更多的信息,你至少可以發佈你的XML讓我看看,可能是什麼問題 – 2012-04-23 13:33:52

+0

我已經更新了我的問題,我爲什麼要這麼做, t想想更多的信息是需要的:我只是想能夠觸發包含像scrollview,viewpager視圖的視圖組上的onClick事件... – jul 2012-04-23 13:38:14

相關問題