Можно ли нажимать две кнопки одновременно, если одна закрывает другую? - PullRequest
0 голосов
/ 12 марта 2012

Извините за странный вопрос, но возможно ли одновременно нажимать на две кнопки в Android (с двумя журналами, «нажал на b1» и «нажал на b2»), если одна полностью покрывает другую?

Ответы [ 2 ]

3 голосов
/ 12 марта 2012

Это не обычно возможно;верхняя кнопка будет поглощать событие нажатия кнопки, а не передавать его тому, кто находится за ней.Не ясно, хотите ли вы получить это поведение или избежать его, тем не менее, вы можете форсировать его, распространяя событие вручную среди прослушивателей кликов.

Вот один из способов (есть несколько);Предположим, что 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");
    }
});

Событие click попадает в слушателя при первой кнопке, что затем вызывает событие click для второй кнопки.

Вот еще один способ, который будет работать(и может быть легко изменено для поддержки событий длинных нажатий):

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 голосов
/ 12 марта 2012

Да, это возможно.Вам нужно будет передать событие щелчка, которое происходит на переднем плане, на фоновое представление.Вы можете сделать это, проверив, где происходит щелчок и происходит ли он в пределах представления.

...