2010-12-11 105 views

回答

32

我認爲你需要使用這些方法之一,以便能夠截獲該事件之前被髮送到相應的組件:

Activity.dispatchTouchEvent(MotionEvent) - 這允許你的活動,以攔截所有觸摸事件,他們是前發送到窗口。

ViewGroup.onInterceptTouchEvent(MotionEvent) - 這允許ViewGroup在事件被分派到子視圖時觀察事件。

ViewParent.requestDisallowInterceptTouchEvent(boolean) - 在父視圖中調用此函數以指示不應使用onInterceptTouchEvent(MotionEvent)攔截觸摸事件。

更多信息here

希望有所幫助。

+1

是否有更簡單的方法來傳遞事件以在父視圖中觸發onClick和onLongClick,或者我必須自己實現它們? – shiami 2010-12-12 13:59:40

+0

看看這個:http://stackoverflow.com/questions/2136696/pass-event-to-parent-view 可能你可能想嘗試傳遞相同的點擊偵聽器到其他實例的建議,即使我不'不知道它是否會奏效,但可能值得一試。 – 2010-12-12 16:58:10

+0

下面的答案是更清潔 – JPM 2013-12-23 19:00:24

157

聲明你TextView不可點擊/可聚焦使用android:clickable="false"android:focusable="false"v.setClickable(false)v.setFocusable(false)。點擊事件現在應該發送給TextView的父母。

注:

爲了實現這個,你必須點擊添加到其直接parent。或將 android:clickable="false"android:focusable="false"設置爲其直接父母以將聽衆傳遞給進一步的父母

+1

哦,如果我能給這個+100我會。一直試圖弄清楚如何使一個點擊只能在ViewPager中工作,而不是在使用TouchImageView實現onTouch的適配器佈局中!這個解決方案像一個魅力。 – JPM 2013-12-23 18:59:07

+0

完美地工作。比例外答案好得多。 – Rooster242 2014-06-16 19:04:43

+0

但如果我想處理EditText的Focus change事件呢? – 2015-01-28 09:15:34

9

有時只有這有助於:

View child = parent.findViewById(R.id.btnMoreText); 
    child.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      View parent = (View) v.getParent(); 
      parent.performClick(); 
     } 
    }); 

另一個變體,作品並不總是:

child.setOnClickListener(null); 
4

兒童
android:duplicateParentState="true" 

則意見得到它繪製狀態(集中,按下等)從它的直接父母而不是從它自己。 你可以爲父母設置onclick,它可以點擊孩子的號碼

3

如果你的TextView創建點擊問題,而不是從你的xml文件中刪除android:inputType=""

+0

我不知道爲什麼,但是這對我來說是訣竅。謝謝! – 2018-02-25 10:51:50

相關問題