Android. Работа с кнопками (Button), событие нажатия на кнопку в мобильном приложении
Создаем проект, выбираем Empty Activity, Activity Name: MainActivity, Layout Name: activity_main. В лайоуте /res/layout/activity_main.xml оставляем вывод текста TextView, добавляем кнопку Button и прописываем для каждого элемента свой id. После нажатия на кнопку будем выводить текст в TextView, который покажет, что событие было обработано.
В итоге /res/layout/activity_main.xml будет выглядеть примерно следующим образом:
TextView и Button - 2 элемента которые нам понадобятся.
Далее в MainActivity (MainActivity.java) добавим описание Button и TextView, для возможности обращения к ним из любого метода класса, инициализируем их в методе onCreate() и заполним с помощью метода findViewById():
Приступаем к обработке события нажатия на кнопку.
Обработка события нажатия на кнопку в приложении
1 способ. Обработка события нажатия с помощью метода setOnClickListenerМетод setOnClickListener() прослушивает событие нажатия на кнопку. В методе onCreate() вводим имя кнопки myButton, ставим точку (.) и вводим setO, далее студия сама предложит варианты, вот что получится:
Внутри скобок набираем new O, далее студия подскажет то что необходимо (OnClickListener), в итоге получим следующее:
Далее с помощью метода setText добавляем изменение текста в TextView:
В итоге обработчик нажатия на кнопку будет выглядеть так:
Сохраняем, запускаем приложение и жмем кнопку.
Полный код MainActivity (MainActivity.java):
Код метода OnClickListener() можно вынести отдельно, например для работы с несколькими кнопками. Создаем обработчик нажатия:
И присваиваем обработчик для кнопки:
В таком случае MainActivity (MainActivity.java) примет вид:
2 способ. Обработка события нажатия с помощью интерфейса OnClickListenerДля реализация данного метода необходимо добавить в класс MainActivity интерфейс OnClickListener, делается это следующим образом - implements View.OnClickListener, после чего объявление класса примет вид:
После добавления интерфейса строка будет подчеркнута красным, все из-за того что у нас еще нет метода onClick() интерфейса OnClickListener, чтобы это исправить жмем Alt + Enter (если при нажатии ничего не происходит, то проверьте текущую раскладку, при кириллической раскладке комбинация может не работать, переведите ввод на латинскую раскладку, например на английский) в любом месте подчеркивания, далее выбираем Implemente Methods в открывшимся окне выбираем onClick и жмем ok. После чего в конец класса MainActivity будет добавлен следующий код:
В этот метод добавляем код, который необходимо выполнить по нажатию на кнопку:
Далее в методе onCreate() назначим обработчик для кнопки, в качестве параметра передаем this, т.е. текущий объект:
Сохраняем, запускаем приложение и жмем кнопку.
Полный код MainActivity (MainActivity.java):
3 способ. Обработка события нажатия с помощью атрибута onClickВ данном способе необходимо добавить атрибут onClick для нужной кнопки, есть несколько способов добавления этого атрибута:
1) Открываем activity_main.xml, во вкладке "Design" жмем на нужную кнопку и в окне "Properties", ищем свойство onClick и вводим в пустое поле название метода для обработки события нажатия кнопки.
2) Или откройте файл activity_main.xml в режиме "Text" и добавьте в элемент Button атрибут onClick с названием метода обработки нажатия кнопки:
В обоих случаях, код файла activity_main.xml будет выглядеть следующим образом:
Далее открываем класс MainActivity (MainActivity.java) и добавляем код метода clickMyBtn():
Сохраняем, запускаем приложение и жмем кнопку.
Полный код MainActivity (MainActivity.java):
3 в 1. Все 3 способа в одном примереДалее для закрепления можно реализовать все три способа на одном экране, для этого в main_activity.xml добавим 3 кнопки, по одной кнопке на каждый способ, (полный код main_activity.xml):
И сам класс MainActivity со всеми тремя способами (файл MainActivity.java):
Сохраняем, запускаем, проверяем.
Один обработчик нажатия для нескольких кнопок
Часто необходимо сделать один обработчик нажатия для нескольких кнопок, т.к. функционал может практически не отличаться. Приведем пример для всех 3-х способов.
Один обработчик нажатия кнопки для 1-го способа, setOnClickListenerИ так в main_activity.xml имеются 3 кнопки:
Открываем класс MainActivity (MainActivity.java) и в обработчик добавляем разный вывод текста в зависимости от нажатой кнопки с помощью конструкции выборки switch case:
И присваиваем кнопкам обработчик:
Сохраняем, запускаем, пробуем.
Полный код MainActivity (MainActivity.java):
Один обработчик нажатия кнопки для 2-го способа, интерфейс OnClickListenerВ данном случае main_activity.xml оставляем как было описано выше (с тремя кнопками) и меняем код класса MainActivity. Добавляем интерфейс, реализацию метода onClick():
И присваиваем кнопкам обработчик:
Сохраняем, запускаем, пробуем.
Полный код класса MainActivity (MainActivity.java):
Один обработчик нажатия кнопки для 3-го способа, атрибут onClickДля этого способа необходимо открыть activity_main.xml и добавить для всех кнопок атрибут android:onClick="clickMyBtn", для всех кнопок один метод:
В класс MainActivity добавляем метод для обработки нажатия:
Сохраняем, запускаем, пробуем.
Полный код класса MainActivity будет выглядеть следующим образом (MainActivity.java):
Обработчик события непосредственно при нажатии на кнопку
Все выше описанные методы обработки нажатия на кнопку в приложении будут срабатывать после того как вы уберете палец с кнопки, т.е. на отжатие кнопки. Для того что бы добавить обработчик непосредственно при касании, нажатии, на кнопку необходимо использовать слушатель OnTouchListener(). Попробуем его использовать.
В activity_main.xml добавим одну кнопку и текст:
А в класс MainActivity добавляем setOnTouchListener(), в метод onCreate():
Метод onTouch() содержит параметр MotionEvent, который позволяет настроить обработку в зависимости от касания.
ACTION_DOWN - событие касания по экрану (в данном случае кнопки).
ACTION_UP - соответственно срабатывает когда вы уберете палец с экрана (элемента).
Выведем в TextView информацию при нажатии на кнопку и отжатие:
Сохраняем, запускаем и пробуем.
Полный код класса MainActivity (MainActivity.java):
Дополнительно
Сделать кнопку недоступнойВ классе MainActivity в методе onCreate() добавляем следующий код:
Такой код пригодится, если необходимо выключить кнопку при определенных условиях.
Так же можно отключить кнопку в activity_main.xml с помощью атрибута android:enabled="false":
Получить текст кнопкиЕсли у вас есть вопросы или предложения по улучшению кода описанного в статье пишите в комментариях. Я всегда открыт к конструктивному диалогу