Слухання подій клавіатури – програмування Android

&nbsp

Обробка введення з клавіатури, придатна для використання на декількох платформах, реалізується непросто На деяких пристроях набагато більше кнопок, ніж на інших, деякі вимагають потрійного клацання для символьного введення і т д ТРЕЙН клацання – відмінний приклад функціоналу, який потрібно по можливості реалізовувати під фреймворці, в класі EditText або якому-небудь його підкласі

Щоб доповнити функціонал віджета з обробки подій клавіатури KeyEvent, використовується метод setOnKeyListener Він відноситься до виду View і встановлює метод OnKeyListener Слухачеві буде приходити кілька подій KeyEvent при кожному користувальницькому натисканні клавіші, по одній події для кожного з трьох типів дії: DOWN, UP і MULTIPLE Типи дії DOWN і UP вказують, що клавіша була натиснута або відпущена, як і у випадку з класом MotionEvent Дія типу MULTIPLE, повязане з клавішами, каже, що клавіша утримується (автоматичний повтор введення) Метод getRepeatCount, що відноситься до подій KeyEvent, вказує, яка кількість натискань представлено подією типу MULTIPLE

У прикладі 710 показаний зразок обробника натискань клавіш Якщо додати цей фрагмент до демонстраційній програмі, він викликає поява на екрані точок у випадкових координатах Це відбувається при натисканні і відпуску клавіш Рожева точка додається при натисканні та відпусканні клавіші пробілу, жовта точка – при натисканні та відпусканні клавіші «Введення», блакитна точка – при натисканні та відпусканні будь-який інший клавіші

Приклад 710 Обробка натискань клавіш

Альтернативні способи обробки подій

Ви, мабуть, помітили, що розглянуті досі методи типу on .., які стосуються слухачам, – в тому числі метод оnКеу – повертають булево значення (bool ЕАN) Такий принцип роботи слухачів дозволяє їм контролювати подальшу обробку події, вироблену викликає стороною

Коли подія контролера передається віджету, код фреймворка в віджеті направляє цю подію в залежності від типу події до придатному методу: onKeyDown, onTouchEvent і т д Ці методи, що знаходяться або в класі View, або в його підкласах, реалізують поведінку, віджету Але, як було описано вище, спочатку фреймворк пропонує подія невластивому слухачеві (onTouchListener, onKeyListener і т д), якщо такий існує Значення, що повертається слухачем, визначає, чи буде подія потім направлено до методів класу View

Якщо слухач повертає false, то подія направляється до методів View, так як обробник не існує Якщо ж, навпаки, слухач повертає true, то прийнято говорити, що подія споживається (consumed) Клас View скасовує всіляку його подальшу обробку Методи View ніколи не викликаються стосовно до спожитого події, не можуть його обробляти або відповідати на нього З точки зору методів View ця ситуація така, як якщо б події не існувало

Отже, існує три сценарії, за якими може розвиватися обробка події

Слухач відсутній – подія направляється до методів класу View для нормальної обробки Реалізація віджета, зрозуміло, може перевизначати ці методи

Слухач існує і повертає true – обробка події слухачем повністю замінює звичайну обробку події віджетом Подія ніколи не прямує до View

Слухач існує і повертає false – подія обробляється спочатку слухачем, а потім – класом View Після того як слухач завершить обробку події, подія передається до View для звичайної обробки Розглянемо, наприклад, що б сталося, якби слухач натискань на клавіші з прикладу 710 був доданий до віджету EditText Оскільки метод onКеу завжди повертає true, фреймворк скасує будь-яку подальшу обробку події KeyEvent відразу після того, як метод поверне значення Тому механізм обробки натискань клавіш з Edi tText навіть не бачитиме натискань клавіші і в текстових полях так і не зявиться ніякого тексту Очевидно, така поведінка нас не влаштовує

Якщо ж, навпаки, метод опКеу поверне false для деяких натискань клавіш, то фреймворк Диспетчир ці події віджету Edi tText для подальшої обробки Механізм EditText побачить ці події, і повязані з ними символи будуть додані в поле EditText, як і очікується У прикладі 711 показаний доповнений код з прикладу 710 Тепер ми не тільки додаємо нові точки в модель, а й фільтруємо символи, що додаються в поле EditText Таким чином, ми домагаємося нормальної обробки числових символів, а будь-які інші символи не відображаються

Приклад 711 Доповнена обробка натискань на клавіші

Якщо у вашому додатку потрібно реалізувати зовсім нові способи обробки подій – яким недостатньо простого доповнення поводжень та фільтрації за допомогою onKeyHandler, – то доведеться розібратися в механізмі обробки натискань клавіш, що застосовується в класі View, і перевизначити цей механізм У загальному вигляді процес виглядає так: події направляються до класу View допомогою методу DispatchKeyEvent Метод DispatchKeyEvent реалізує поведінку, описане вище, пропонуючи подія спочатку методу onKeyHandler, а потім, якщо обробник поверне false, – методам класу View, що реалізує інтерфейс KeyEvent Callback Це методи onKeyDown, onKeyUp і onKeyMultiple

Джерело: Android Програмування на Java для нового покоління мобільних пристроїв

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*