2012-03-11 74 views

回答

3

這不是一般可能;頂部按鈕將吸收按鈕單擊事件,而不是將它傳遞給它後面的按鈕。目前尚不清楚您是否想要獲得此行爲或避免它,但是,您可以通過在點擊監聽器上手動傳播事件來強制實施此行爲。

這裏有一種方法(有幾個);假設buttonOne是buttonTwo的頂部:

final Button buttonOne = (Button) findViewById(...); 
final Button buttonTwo = (Button) findViewById(...); 

buttonOne.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.d("ButtonTest", "ButtonOne clicked"); 
     buttonTwo.performClick(); 
    } 
}); 

buttonTwo.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.d("ButtonTest", "ButtonTwo clicked"); 
    } 
}); 

單擊事件進入按鈕之一,然後使上兩個按鈕點擊事件監聽器。

這裏是另一種方式,其將工作(和可以改變,以輕鬆支持長按事件):我不知道我怎麼能做到這一點

final Button buttonOne = (Button) findViewById(...); 
final Button buttonTwo = (Button) findViewById(...); 

final OnClickListener listenerTwo = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.d("ButtonTest", "ButtonTwo clicked"); 
    } 
}; 

final OnClickListener listenerOne = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.d("ButtonTest", "ButtonOne clicked"); 
     listenerTwo.onClick(buttonTwo); 
    } 
}; 

buttonOne.setOnClickListener(listenerOne); 
buttonTwo.setOnClickListener(listenerTwo); 
+0

我想obatin這種行爲。你能告訴我一個代碼如何強制它嗎?正如你所說,如果我在兩個按鈕上單擊事件,最上面的一個會吸收點擊事件。 – 2012-03-11 21:53:19

+0

我已經添加了一個示例。 – antonyt 2012-03-11 22:00:49

+0

如果我想在buttontwo上使用onLingClickEvent,該怎麼辦?所以如果我的點擊很短,那麼buttonone的事件就完成了,如果我的點擊很長,那麼buttontwo的事件就完成了?有沒有perfromLongClick或其他類似的?我仍然需要兩個按鈕,所以製作一個setonclicklistener和一個setonLongclicklistener對我來說並不好。 – 2012-03-11 22:11:54

0

是的,這是可能的。您需要將發生在前景視圖上的點擊事件傳遞給背景視圖。您可以通過檢查點擊發生的位置以及它是否出現在視圖的邊界內來做到這一點。

+0

。你能告訴我一個代碼,你可以檢查出現問題的地方嗎? – 2012-03-11 21:58:14

+0

您提到前景按鈕完全覆蓋後臺按鈕,意味着無論何時單擊前景按鈕,都應該觸發後臺按鈕的單擊事件,因此您甚至需要執行任何邊界檢查? (如果是這種情況,您可能需要考慮重新考慮您的設計) – 2012-03-11 22:04:02

相關問題