【发布时间】:2026-01-17 22:20:06
【问题描述】:
抱歉这个奇怪的问题,但是如果一个完全覆盖另一个按钮,是否可以在 android 中同时单击两个按钮(有两个日志,“单击 b1”和“单击 b2”)?
【问题讨论】:
抱歉这个奇怪的问题,但是如果一个完全覆盖另一个按钮,是否可以在 android 中同时单击两个按钮(有两个日志,“单击 b1”和“单击 b2”)?
【问题讨论】:
这通常是不可能的;顶部按钮将吸收按钮单击事件,而不是将其传递给它后面的按钮。目前尚不清楚您是否想要获得此行为或避免它,但是,您可以通过在点击侦听器中手动传播事件来强制它。
这是一种方法(有几种);假设 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);
【讨论】:
是的,这是可能的。您需要将前景视图上发生的单击事件传递给背景视图。您可以通过检查单击发生的位置以及它是否发生在视图的边界内来做到这一点。
【讨论】: