2010-12-14 2 views
1

позволяет предположить, что у меня есть LinearLayout, горизонтальный, содержащий TextView, а затем Spinner или другой кликабельный TextView или EditText.Делегирование событий касания

Я хочу, чтобы щелчок по любой части строки (если в макете есть прокладка, а затем область макета!), Он удалит onTouchEvent в правую часть макета (EditText, TextView или Spinner), как если бы они были нажаты сами.

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

Может кто-нибудь помочь?

ответ

1

я должен был сделать что-то похожее на это некоторое время назад, и в конечном итоге писать свой собственный делегат и назначение onclicklisteners для всех компонентов в моем макете для этого делегата. Это громоздко, но не слишком больно для реализации, и получилось хорошо.

Точка, я ничего не видел в API, чтобы обрабатывать подобные вещи. Единственная вещь, которую я мог бы предложить, что это, безусловно, можно назначить onclicklistener компоненты и просто отправить событие onclicklistener другого компонента, как так:

thislinearlayout.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     getOtherComponent().performClick(); 
    } 
}); 

Вы можете сделать то же самое с сенсорными слушателями.

+0

10x для ответа! (только один :-)) Возможно, что вы предлагаете, но специально для сенсорных событий, я обнаружил touchDelegates, если вы посмотрите в исходном коде класса View, вы увидите, что он сначала проверяет mTouchDelegate на недействительность, если это не (если вы установили его не null), он делегирует событие touch, я действительно верю, что onClick будет вызываться ПОСЛЕ касания, чтобы он также выполнял щелчок. 10x! – codeScriber

+0

Хм .... это может быть что-то посмотреть ;-) Вы правы, onClick вызывается после того, как система определяет, что событие касания - это клик, а не что-то другое, как перетаскивание. Удачи! – atraudes

Смежные вопросы