我有一個佈局的背景是一個選擇器的TextView。 TextView的文本被設置爲從HTML生成。 然後我用LinkMovementMethod設置TextView。如何在Android上將視圖的onClick事件傳遞給其父項?
現在,當我點擊TextView時,單擊事件不會發送到其父佈局以觸發選擇器。
這應該如何解決?
我有一個佈局的背景是一個選擇器的TextView。 TextView的文本被設置爲從HTML生成。 然後我用LinkMovementMethod設置TextView。如何在Android上將視圖的onClick事件傳遞給其父項?
現在,當我點擊TextView時,單擊事件不會發送到其父佈局以觸發選擇器。
這應該如何解決?
我認爲你需要使用這些方法之一,以便能夠截獲該事件之前被髮送到相應的組件:
Activity.dispatchTouchEvent(MotionEvent)
- 這允許你的活動,以攔截所有觸摸事件,他們是前發送到窗口。
ViewGroup.onInterceptTouchEvent(MotionEvent)
- 這允許ViewGroup在事件被分派到子視圖時觀察事件。
ViewParent.requestDisallowInterceptTouchEvent(boolean)
- 在父視圖中調用此函數以指示不應使用onInterceptTouchEvent(MotionEvent)攔截觸摸事件。
更多信息here。
希望有所幫助。
聲明你TextView
不可點擊/可聚焦使用android:clickable="false"
和android:focusable="false"
或v.setClickable(false)
和v.setFocusable(false)
。點擊事件現在應該發送給TextView
的父母。
注:
爲了實現這個,你必須點擊添加到其直接parent
。或將 android:clickable="false"
和android:focusable="false"
設置爲其直接父母以將聽衆傳遞給進一步的父母。
哦,如果我能給這個+100我會。一直試圖弄清楚如何使一個點擊只能在ViewPager中工作,而不是在使用TouchImageView實現onTouch的適配器佈局中!這個解決方案像一個魅力。 – JPM 2013-12-23 18:59:07
完美地工作。比例外答案好得多。 – Rooster242 2014-06-16 19:04:43
但如果我想處理EditText的Focus change事件呢? – 2015-01-28 09:15:34
有時只有這有助於:
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);
把
兒童android:duplicateParentState="true"
則意見得到它繪製狀態(集中,按下等)從它的直接父母而不是從它自己。 你可以爲父母設置onclick,它可以點擊孩子的號碼
如果你的TextView
創建點擊問題,而不是從你的xml文件中刪除android:inputType=""
。
我不知道爲什麼,但是這對我來說是訣竅。謝謝! – 2018-02-25 10:51:50
是否有更簡單的方法來傳遞事件以在父視圖中觸發onClick和onLongClick,或者我必須自己實現它們? – shiami 2010-12-12 13:59:40
看看這個:http://stackoverflow.com/questions/2136696/pass-event-to-parent-view 可能你可能想嘗試傳遞相同的點擊偵聽器到其他實例的建議,即使我不'不知道它是否會奏效,但可能值得一試。 – 2010-12-12 16:58:10
下面的答案是更清潔 – JPM 2013-12-23 19:00:24