給android的LinearLayout新增點選事件
阿新 • • 發佈:2019-01-24
home.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int i = 0;
}
linearlayout的孩子們估計都有自己的Click事件處理函數了吧?
Click事件其實一種封裝的事件,而不是我說的“硬體觸發的事件”,“硬體觸發的事件”指的是MouseUp, MouseDown,MouseMove和MouseCancel。View類中對於Click事件預設都是採取返回了false。所以你的linearlayout是拿不到事件的,因為它的孩子已經處理過了。
但是有一種解決方案:你可以重寫linearlayout的onInterceptTouchEvent()方法,它會在事件傳給孩子之前被呼叫。
public void onClick(View v) {
int i = 0;
}
});
需要注意的是new的是View.OnClickListener(),而不是OnClickListener()。否則找不到OnClickListener函式。
如果你的linearlayout中的孩子們都監聽了click事件了,linearlayout是拿不到事件的。
在Android系統的中,硬體觸發的事件最開始是Activity拿到的,然後它向裡面的View一級級的dispatch,所以最裡層的view最後拿到了事件,而它又沒有孩子了,它就開始處理了(也就是響應事件)。在孩子的事件處理函式中,如果返回了false,它的父容器還是能再次拿到了事件的。如果返回了true,也就是告訴它的父容器,這事我管了,你就別過問了。
linearlayout的孩子們估計都有自己的Click事件處理函數了吧?
Click事件其實一種封裝的事件,而不是我說的“硬體觸發的事件”,“硬體觸發的事件”指的是MouseUp, MouseDown,MouseMove和MouseCancel。View類中對於Click事件預設都是採取返回了false。所以你的linearlayout是拿不到事件的,因為它的孩子已經處理過了。
但是有一種解決方案:你可以重寫linearlayout的onInterceptTouchEvent()方法,它會在事件傳給孩子之前被呼叫。
轉自 http://blog.csdn.net/wletv/article/details/8786244