Як зробити кнопку в андроїд студіо
Клас Button - найвикористовується з усіх елементів управління. Оскільки є спадкоємцем Textview, то використовує багато знайомих нам атрибутів: textColor, textSize та інші.
Якщо на екрані розмістити кнопку і натиснути на неї, то нічого не станеться. Необхідно написати код, який виконуватиметься при натисканні. Існує кілька способів обробки натискань на кнопки. Отже, обробка подій.
Обробка подій
Принцип обробки подій простий: джерело генерує подію та посилає її одному чи більше слухачам (listener). У цій схемі слухач просто чекає доти, доки не отримає подію. Як тільки подію отримано, слухач обробляє її та повертає управління.
У цій моделі обробки подій слухачі мають:
- реєструватися джерелом, щоб отримувати повідомлення про події;
- мати методи обробки подій.
Таким чином, щоб створювати додатки, що взаємодіють з користувачем, необхідно:
- зареєструвати його для необхідного елемента керування,
- написати обробник події.
Методи, що приймають та обробляють події, визначені в наборі інтерфейсів.
Клас view містить набір інтерфейсів, які називаються on. Listener(), у кожному з яких оголошено єдиний абстрактний метод зворотного виклику. Цей метод необхідно перевизначити в класі користувача. Його буде викликати система Android, коли екземпляр view (або нащадок), до якого був приєднаний слухач події, викликається взаємодією користувача з інтерфейсом програми.
Усього клас view містить шість інтерфейсів:
- OnClickListener;
- OnLongClickListener;
- OnFocusChangeListener;
- OnKeyListener;
- OnTouchListener;
- OnCreateContextMenuListener.
Обробка натискання кнопки
Створіть новий проект MyButton.Відкрийте файл розмітки та розмістіть три кнопки з ідентифікаторами button1, button2 та button3, написами "Button l", "Button 2" і "Button 3", а також дві мітки з ідентифікаторами textView1 та textView2 та написами: у першій ”Натиснути , а в другій залишаємо значення за замовчуванням ”TextView”. Графічна розмітка з позначками представлена нижче.
Існує кілька способів обробки натискання кнопки. Розглянемо їх.
Перший спосіб
Перший спосіб розроблений для Android і використовує атрибут XML onClick, який записується в XML-коді елемента управління (зокрема і Button), натискання якого ми збираємося обробляти.
android:onClick – атрибут, якому надається ім'я методу обробки події
onMyClick – метод, який оброблятиме натискання. Ім'я методу має бути осмисленим. Сам метод записується у програмному коді активності.
У класі активності метод записується у такому форматі:
Спробуємо цей метод практично. Зробіть таке:
1. Для кожної кнопки в XML-коді кнопки запишете обробник:
Обробник буде одним для всіх кнопок.
2. У класі public class MainActivity extends Activity
Запишемо один метод onMyClick, який оброблятиме всі кнопки
Другий спосіб
Другий спосіб є традиційним для Java та використовує інтерфейси. Для цього в нашому класі потрібно продати інтерфейс View.OnClickListener. Цей інтерфейс містить єдиний метод:
abstract void onClick(View v), який необхідно визначити у класі.
Підключення інтерфейсу виконується так:
1. У класі public class MainActivity extends Activity надрукуєте implements View.OnClickListener
Для написання використовуйте підказки Eclipse: наберіть слово i та натисніть комбінацію клавіш Ctrl+Space для виведення варіантів продовження. Eclipse запропонує ключове слово implements, натискаючи Enter. Далі, набираємо View, ставимо крапку, Eclipse запропонує перелік варіантів, вибираємо OnClickListener.
Eclipse створить заготівлю методу onClick(View v):
2. У методі protected void onCreate(Bundle savedInstanceState)
виконуємо пошук наших кнопок (findViewById) та реєструємо кожну кнопку як слухача подій за допомогою методу setOnClickListener():
Все готове. Залишилося написати код натискання кнопок.
Для демонстрації другого методу обробки натискання наших кнопок внесемо до нашого класу такі зміни:
Видалимо з XML-файлу для всіх кнопок
повністю замінимо метод public void on MyClick (View v).
Напишемо обробник onClick(View v). Код цього оброблювача повторює код попереднього оброблювача: відмінності тільки в назві методу та тексті, що виводиться.
Слідуйте за нами на нашій фан-сторінці, щоб отримувати повідомлення щоразу, коли з'являються нові статті. Facebook
1- Android Button
В Android, Button це "контроль інтерфейсу користувача" (user interface control), який використовується для виконання дії, коли користувач клікає (click) на нього.
У ієрархії класів, Button це підклас у TextView, тому він успадковує всі властивості TextView.
За замовчуванням, при відображенні змісту, текст у Button перетвориться на великі літери (uppercase), вам потрібно налаштувати android:textAllCaps="false" щоб переконатися, що зміст відображатиметься як у оригіналі.
Атрибут android:gravity використовується для настроювання відображення тексту Button. Його значення це поєднання наступних значень:
| Constant in Java | Value | Description |
| Gravity.LEFT | left | |
| Gravity.CENTER_HORIZONTAL | center_horizontal | |
| Gravity.RIGHT | right | |
| Gravity.TOP | top | |
| Gravity.CENTER_VERTICAL | center_vertical | |
| Gravity.BOTTOM | bottom | |
| Gravity.START | start | |
| Gravity.END | end | |
| Gravity.CENTER | center | |
Android дозволяє вам додати 4 icon в один Button через атрибути android:drawableLef, android:drawableTop, android:drawableRight, android:drawableBottom, android:drawableStart, android:drawableEnd.
Android 4.1 починає підтримувати різницю в лейауті текстів різних мов. Точніше в англійській, текст написаний ліворуч праворуч, в той час як в арабській, текст написаний праворуч ліворуч.
У режимі лейауту LTR (Left to Right): Атрибут android:drawableStart працюватиме як android:drawableLeft, і android:drawableEnd буде працювати як android:drawableRight.
У режимі лейауту RTL (Right to Left): Атрибут android:drawableStart буде працювати як android:drawableRight, і android:drawableEnd буде працювати як android:drawableStart.
2- Button Click Event
Подія Click (Клік) відбувається коли користувач натискає (Press down) та відпускає (Release) Button.
Ви можете визначити назву методу, який буде викликаний, коли користувач клікає (click) на Button використовуючи атрибут android.onClick.
У той же час, створіть цей метод у класі MainActivity.
Ви також можете визначити метод, який буде викликаний, коли користувач клікає на Button, повністю з Java кодом:
3- Button Long Click Event
Long Click (Довгий клік) в Android відбувається коли користувач натискає (Press down) View і довго тримає таким чином. Точніше, подія відбудеться під час LONG_PRESS_TIMEOUT у мілісекунду, коли користувач натискає (Press down). Ви можете отримати значення LONG_PRESS_TIMEOUT з методу ViewConfiguration.getLongPressTimeout().
Тривалість за промовчанням довгого кліка (Long-Click) в Android це DEFAULT_LONG_PRESS_TIMEOUT мілісекунди. Користувач може змінити тривалість довгого кліка (Long-Click) в Settings (налаштуваннях) пристрою, він буде застосований до всіх програм в системі. Розробники програм не можуть зрозуміти це значення.
Наприклад: Подія, коли користувач натискає Long Click (Довгий клік) на Button за допомогою Java коду(Зверніть увагу, що ви не можете зробити це з XML).
Якщо користувач клікає (click) на View на довгий час (Більше ніж LONG_PRESS_TIMEOUT мілісекунди), він може генерувати 2 послідовні події це Long-Click та Click.
Метод onLongClick(View) повертає значення boolean. Якщо повертає true, ви втратили подію Long-Click, і подія Click, яка відбувається після, буде пропущена. Навпаки, якщо метод onLongClick(View) повертає значення false, це означає подію Click, яка відбувається потім буде виконана.
4- Приклад Android Button
Це простий приклад, користувач введе 2 числа та натисне Button, щоб порахувати суму цих 2-х чисел.
Одним з важливих компонентів інтерфейсу користувача в додатку є кнопка. Вона використовується для виконання різних дій користувача.
У цій статті ми наведемо приклади використання та стилізації кнопки.
Додаємо кнопку на розмітку
Інтерфейс користувача призначений у XML-файлі з розміткою. Ви можете додати елемент Button та встановити атрибути вручну. Або ви можете, скориставшись інструментом дизайну, додати Button із палітри елементів та задати атрибути.
Атрибути кнопки
Button є підкласом TextView та успадковує атрибути від TextView та View. Нижче наведено деякі важливі атрибути кнопки, які можна використовувати для налаштування стилю та поведінки.
- background: установка як фон як кольору, так і drawable
- onClick: встановити метод, який запускатиметься при натисканні на кнопку
- minHeight: для визначення мінімальної висоти кнопки
- minWidth: для визначення мінімальної ширини кнопки
- stateListAnimator: визначення анімації при зміні стану кнопки
- focusable: визначення того, чи буде оброблено натискання клавіші
- clickable: вказати, чи є кнопка клікабельною
- gravity: встановлення вирівнювання тексту кнопки
- textAppearance: встановити стиль тексту
Увімкнення та вимкнення кнопки
Ви можете використовувати атрибут enabled для увімкнення або вимкнення кнопки, встановивши його в true або false. Також це можна зробити програмно, викликавши метод setEnabled(), як показано нижче:
Кнопка з Drawable
Ви можете відображати на кнопці разом з текстом зображення, використовуючи drawableTop, drawableRight, drawableBottom або drawableLeft, залежно від того, де розміщувати картинку, як показано на скріншоті нижче.
ImageButton
Android також надає ImageButton, завданням якого є використання зображення як кнопки. Щоб встановити зображення, можна використовувати атрибут src. Ви також можете використовувати різні зображення, які будуть змінюватись в залежності від стану кнопки, змінюючи в XML drawable selector як показано нижче.
Приклад XML drawable selector
Обробка натискань на кнопку
Щоб встановити атрибут onClick, спочатку визначте метод типу void, який приймає як параметр View, в активності або фрагменті і потім використовуйте ім'я цього методу як значення для атрибута onClick, як показано нижче.
Нижче наведено код обробки натискання за допомогою слухача.
Дизайн та стилі кнопок
Ви можете використовувати стилі та теми, щоб змінити вигляд кнопок. Платформа Android надає певні стилі. На малюнку нижче можна побачити, як відображаються кнопки з різними стилями.
Приклад застосування теми для кнопки.
Налаштування стилів кнопок
Ви можете змінити кольори за замовчуванням для стилів, що застосовуються до кнопки, встановивши атрибут colorAccent на рівні програми та атрибут colorButtonNormal на рівні віджету для потрібних кольорів. Атрибут colorControlHighlight використовується для налаштування кольору кнопки, коли вона знаходиться в натиснутому стані.
Як тільки ви визначите свій стиль, ви можете застосувати його до кнопок за допомогою атрибута theme. Нижче наведено приклад теми користувача.
Кнопка із закругленими кутами
Ви можете визначити елемент inset, як показано нижче, щоб створити кнопку із закругленими кутами та зберегти файл із drawable у папці res/drawable. Ви можете збільшити або зменшити атрибут радіуса елемента, щоб налаштувати радіус кутів кнопки.
Потім визначте стиль, що визначає атрибут background для xml drawable і застосуйте його до кнопки за допомогою атрибута style.
Висота та тінь кнопки
Можна встановити атрибути elevation і translationZ, щоб намалювати тінь кнопки.
Налаштування анімації тіні
Ви можете визначити різні властивості тіней для різних станів кнопки та анімувати перехід шляхом визначення селектора. Ви можете застосувати аніматор до кнопки, використовуючи властивість stateListAnimator.
Зверніть увагу, що stateListAnimator встановлений у null у наведеному вище прикладі. Це було зроблено для видалення аніматора за умовчанням, щоб elevation і translationZ працювали.
Щоб налаштувати анімацію тіні при зміні стану кнопок, потрібно визначити селектор, як показано нижче, в папці res/animator і встановити властивість stateListAnimator своєї теми для певного аніматора.
Застосуйте наступну тему, яка використовує аніматор, до кнопки за допомогою атрибута style або theme.
Проста кнопка логіну
Поєднуючи все вищесказане, можна створити гарну кнопку, яка дозволяє, наприклад, заходити користувачам на свої акаунти. Код розмітки буде виглядати так:
Крім того, за допомогою атрибуту drawableLeft можна додати зображення до нашої кнопки, у тому числі векторне. На старих пристроях векторні зображення викликають падіння всієї програми, тому зробимо це програмно в коді активності за допомогою AppCompatResources:
Метод setCompoundDrawablesWithIntrinsicBounds() робить те саме, що і атрибути drawableLeft, drawableTop і так далі. Як параметри потрібно вказати, де саме розміщуватиметься зображення (вказуємо null у разі, якщо тут зображення не потрібно).
У layout-файл main.xml напишемо таке і збережемо:
У нас є TextView з текстом та дві кнопки: OK та Cancel. Ми зробимо так, щоб після натискання кнопки змінювався вміст TextView. Після натискання кнопки OK – виводитимемо текст: «Натиснута кнопка ОК», після натискання Cancel – «Натиснута кнопка Cancel».
Відкриваємо MainActivity.java. Опис об'єктів винесемо за межі методу onCreate. Це зроблено, щоб ми могли з будь-якого методу звертатися до них. У Create ми ці об'єкти заповнимо за допомогою вже пройденого нами методу findViewById. У результаті має вийти такий код:
Оновлюємо секцію import (CTRL+SHIFT+O). Об'єкти tvOut, btnOk та btnCancel відповідають View-елементам екрану і ми можемо з ними працювати. Нам треба навчити кнопку реагувати на натискання. Для цього кнопка має метод setOnClickListener (View.OnClickListener l). На вхід подається об'єкт із інтерфейсом View.OnClickListener. Саме цьому об'єкту кнопка доручить обробляти натискання. Давайте створимо такий об'єкт. Код продовжуємо писати в onCreate:
Eclipse підкреслює OnClickListener червоною лінією
т.к. поки що не знає його. Потрібно оновити секцію import. Тиснемо CTRL+SHIFT+O, Eclipse показує нам, що він знає два інтерфейси з ім'ям onClickListener і пропонує вибрати. Нам потрібний View.OnClickListener, т.к. метод кнопки setOnClickListener приймає саме його на вхід.
Отже ми створили об'єкт oclBtnOk, який реалізує інтерфейс View.OnClickListener. Об'єкт містить метод onClick – це те, що нам потрібно. Саме цей метод буде викликаний під час натискання кнопки. Ми вирішили, що після натискання виводитимемо текст: «Натиснута кнопка ОК» у TextView (tvOut). Реалізуємо це.
У методі onClick пишемо:
Обробник натискання готовий. Залишилося "годувати" його кнопці за допомогою методу setOnClickListener.
У результаті має вийде такий код:
Все зберігаємо та запускаємо. Тиснемо на кнопку ОК і бачимо. Що текст змінився
Натискання на Cancel поки нічого не призводить, т.к. для неї ми обробник не створили та не привласнили. Давайте зробимо це аналогічно як для кнопки OK.Спочатку ми створюємо обробник:
Потім присвоюємо його кнопці:
Зберігаємо, запускаємо, перевіряємо. Обидві кнопки тепер можуть обробляти натискання.
Давайте ще раз проговоримо механізм обробки подій на прикладі натискання кнопки. Сама кнопка обробляти натискання не вміє, їй потрібен обробник (його також називають слухачем – listener), який присвоюється за допомогою методу setOnClickListener. Коли натискають кнопку, обробник реагує і виконує код з методу onClick. Це можна зобразити так:
Відповідно для реалізації необхідно виконати такі кроки:
- створюємо обробник
- Заповнюємо метод onClick
- привласнюємо обробник кнопці
та система обробки подій готова.
- навчимося використовувати один обробник для кількох View-елементів
- навчимо Activity виступати як оброблювач
- у чатах вирішуємо питання і проблеми з різних тем: Android, Kotlin, RxJava, Dagger, Тестування
- ну і якщо просто хочеться поговорити з колегами з розробки, тобто чат Флудільня
- новий чат Performance для обговорення проблем продуктивності та для ваших побажань щодо змісту курсу з цієї теми
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():
package com.firestork.coderstat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity < TextView myTextView; Button myButton; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myTextView = (TextView) findViewById(R.id.myTextView); myButton = (Button) findViewById(R.id.myButton); >>
Починаємо обробку події натискання на кнопку.
Обробка події натискання на кнопку у додатку
1 спосіб. Обробка події натискання за допомогою методу setOnClickListener
Метод setOnClickListener() прослуховує подію натискання кнопки. У методі onCreate() вводимо ім'я кнопки myButton, ставимо крапку (.) і вводимо setO, Далі студія сама запропонує варіанти, ось що вийде:
myButton.setOnClickListener();
Усередині дужок набираємо new O, далі студія підкаже те, що необхідно (OnClickListener), у результаті отримаємо таке:
myButton.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View v) < >>);
Далі за допомогою методу setText додаємо зміну тексту в TextView:
myTextView.setText("Всі ок)");
У результаті обробник натискання на кнопку виглядатиме так:
myButton.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View v) < myTextView.setText("Все ок)"); >>);
Зберігаємо, запускаємо програму і тиснемо кнопку.
Повний код MainActivity (MainActivity.java):
package com.firestork.coderstat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity < TextView myTextView; Button myButton; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myTextView = (TextView) findViewById(R.id.myTextView); myButton = (Button) findViewById(R.id.myButton); myButton.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View v) < myTextView.setText("Все ок)"); >>); > >
Код методу OnClickListener() можна винести окремо, наприклад, для роботи з кількома кнопками. Створюємо обробник натискання:
OnClickListener oMyButton = new OnClickListener() < @Override public void onClick(View v) < myTextView.setText("Все ок)"); >>;
І надаємо обробник для кнопки:
myButton.setOnClickListener(oMyButton);
У такому разі MainActivity (MainActivity.java) набуде вигляду:
package com.firestork.coderstat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.view.View.OnClickListener; public class MainActivity extends AppCompatActivity < TextView myTextView; Button myButton; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myTextView = (TextView) findViewById(R.id.myTextView); myButton = (Button) findViewById(R.id.myButton); OnClickListener oMyButton = new OnClickListener() < @Override public void onClick(View v) < myTextView.setText("Все ок)"); >>; myButton.setOnClickListener(oMyButton); > >
2 спосіб. Обробка події натискання за допомогою інтерфейсу OnClickListener
Для реалізації даного методу необхідно додати до класу MainActivity інтерфейс OnClickListener, робиться це в такий спосіб - implements View.OnClickListener, після чого оголошення класу набуде вигляду:
public class MainActivity extends AppCompatActivity implements View.OnClickListenerПісля додавання інтерфейсу рядок буде підкреслено червоним, все через те, що у нас ще немає методу onClick() інтерфейсу OnClickListener, щоб це виправити тиснемо Alt + Enter (якщо при натисканні нічого не відбувається, то перевірте поточну розкладку, при кирилиці комбінація може не працювати, переведіть введення на латинську розкладку, наприклад на англійську) в будь-якому місці підкреслення, далі вибираємо Implemente Methods у вікні вибираємо onClick і тиснемо ok. Після чого в кінець класу MainActivity буде додано наступний код:
@Override public void onClick(View v)У цей метод додаємо код, який необхідно виконати після натискання на кнопку:
@Override public void onClick(View v)Далі у методі onCreate() призначимо обробник для кнопки, як параметр передаємо this, тобто.
myButton.setOnClickListener(this);Зберігаємо, запускаємо програму і тиснемо кнопку.
Повний код MainActivity (MainActivity.java):
package com.firestork.coderstat; import android.support.App.AppCompatActivity; AppCompatActivity implements View.OnClickListener < TextView myTextView; Button myButton; @Override protected void onCreate(Bundle savedInstanceState) findViewById(R.id.myButton); myButton.setOnClickListener(this); >@Override3 спосіб. Обробка події натискання за допомогою атрибута onClick
У цьому способі необхідно додати атрибут onClick для потрібної кнопки є кілька способів додавання цього атрибуту:
1) Відкриваємо activity_main.xml, у вкладці "Design"тиснемо на потрібну кнопку і у вікні"Properties", шукаємо властивість onClick і вводимо в порожнє поле назву методу обробки події натискання кнопки.
2) Або відкрийте файл activity_main.xml у режимі "Textі додайте в елемент Button атрибут onClick з назвою методу обробки натискання кнопки:
android:onClick="clickMyBtn"В обох випадках код файлу activity_main.xml буде виглядати так:
Далі відкриваємо клас MainActivity (MainActivity.java) і додаємо код методу clickMyBtn():
public void clickMyBtn(View view)Зберігаємо, запускаємо програму і тиснемо кнопку.
Повний код MainActivity (MainActivity.java):
package com.firestork.coderstat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity < TextView myTextView; Button myButton; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myTextView = (TextView) findViewById(R.id.myTextView); myButton = (Button) findViewById(R.id.myButton); >public void clickMyBtn(View view) < myTextView.setText("Все ок)"); >>3 в 1. Усі 3 способи в одному прикладі
Далі для закріплення можна реалізувати всі три способи на одному екрані, для цього main_activity.xml додамо 3 кнопки, по одній кнопці на кожен спосіб (повний код main_activity.xml):
І сам клас MainActivity з усіма трьома способами (файл MainActivity.java):
package com.firestork.coderstat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.view.View.OnClickListener; public class MainActivity extends AppCompatActivity implements View.OnClickListener < TextView myTextView; Button myButton1; Button myButton2; Button myButton3; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myTextView = (TextView) findViewById(R.id.myTextView); myButton1 = (Button) findViewById(R.id.myButton1); myButton2 = (Button) findViewById(R.id.myButton2); myButton3 = (Button) findViewById(R.id.myButton3); OnClickListener oMyButton = new OnClickListener() < @Override public void onClick(View v) < myTextView.setText("Ви використовували перший спосіб"); >>; myButton1.setOnClickListener(oMyButton); myButton2.setOnClickListener(this); > @Override public void onClick(View v) < myTextView.setText("Ви використовували 2-й спосіб"); >public void clickMyBtn(View view) < myTextView.setText("Ви використовували 3-й спосіб"); >>Зберігаємо, запускаємо, перевіряємо.
Один обробник натискання для кількох кнопок
Нерідко потрібно зробити один обробник натискання для кількох кнопок, т.к. функціонал може практично не відрізнятись. Наведемо приклад всім 3-х способів.
Один обробник натискання кнопки для одного способу, setOnClickListener
І так у main_activity.xml є 3 кнопки:
Відкриваємо клас MainActivity (MainActivity.java) і до оброблювача додаємо різний висновок тексту в залежності від натиснутої кнопки за допомогою конструкції вибірки switch case:
OnClickListener oMyButton = new OnClickListener() < @Override public void onClick(View v) < switch (v.getId()) < case R.id.myButton1: myTextView.setText("Ви натиснули на 1 кнопку"); break; case R.id.myButton2: myTextView.setText("Ви натиснули на 2-ю кнопку"); break; case R.id.myButton3: myTextView.setText("Ви натиснули на 3-ю кнопку"); break; >> >;І присвоюємо кнопкам оброблювач:
myButton1.setOnClickListener(oMyButton); myButton2.setOnClickListener(oMyButton); myButton3.setOnClickListener(oMyButton);Зберігаємо, запускаємо, пробуємо.
Повний код MainActivity (MainActivity.java):
package com.firestork.coderstat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.view.View.OnClickListener; public class MainActivity extends AppCompatActivity < TextView myTextView; Button myButton1; Button myButton2; Button myButton3; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myTextView = (TextView) findViewById(R.id.myTextView); myButton1 = (Button) findViewById(R.id.myButton1); myButton2 = (Button) findViewById(R.id.myButton2); myButton3 = (Button) findViewById(R.id.myButton3); OnClickListener oMyButton = new OnClickListener() < @Override public void onClick(View v) < switch (v.getId()) < case R.id.myButton1: myTextView.setText("Ви натиснули на 1 кнопку"); break; case R.id.myButton2: myTextView.setText("Ви натиснули на 2-ю кнопку"); break; case R.id.myButton3: myTextView.setText("Ви натиснули на 3-ю кнопку"); break; >> >; myButton1.setOnClickListener(oMyButton); myButton2.setOnClickListener(oMyButton); myButton3.setOnClickListener(oMyButton); > >Один обробник натискання кнопки для 2-го способу OnClickListener
В даному випадку main_activity.xml залишаємо як було описано вище (з трьома кнопками) і змінюємо код класу MainActivity. Додаємо інтерфейс, реалізацію методу onClick():
@Override public void onClick(View v) < switch (v.getId()) < case R.id.myButton1: myTextView.setText("Ви натиснули на 1 кнопку"); break; case R.id.myButton2: myTextView.setText("Ви натиснули на 2-ю кнопку"); break; case R.id.myButton3: myTextView.setText("Ви натиснули на 3-ю кнопку"); break; >>І присвоюємо кнопкам оброблювач:
myButton1.setOnClickListener(this); myButton2.setOnClickListener(this); myButton3.setOnClickListener(this);Зберігаємо, запускаємо, пробуємо.
Повний код класу MainActivity (MainActivity.java):
package com.firestork.coderstat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity implements View.OnClickListener < TextView myTextView; Button myButton1; Button myButton2; Button myButton3; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myTextView = (TextView) findViewById(R.id.myTextView); myButton1 = (Button) findViewById(R.id.myButton1); myButton2 = (Button) findViewById(R.id.myButton2); myButton3 = (Button) findViewById(R.id.myButton3); myButton1.setOnClickListener(this); myButton2.setOnClickListener(this); myButton3.setOnClickListener(this); >@Override public void onClick(View v) < switch (v.getId()) < case R.id.myButton1: myTextView.setText("Ви натиснули на 1 кнопку"); break; case R.id.myButton2: myTextView.setText("Ви натиснули на 2-ю кнопку"); break; case R.id.myButton3: myTextView.setText("Ви натиснули на 3-ю кнопку"); break; >> >Один обробник натискання кнопки для 3-го способу, атрибут onClick
Для цього способу необхідно відкрити activity_main.xml та додати для всіх кнопок атрибут android:onClick="clickMyBtn", для всіх кнопок один метод:
До класу MainActivity додаємо метод для обробки натискання:
public void clickMyBtn(View v) < switch (v.getId()) < case R.id.myButton1: myTextView.setText("Ви натиснули на 1-у кнопку"); break; case R.id.myButton2: myTextView.setText("Ви натиснули на 2-ю кнопку"); break; case R.id.myButton3: myTextView.setText("Ви натиснули на 3-ю кнопку"); break; >>Зберігаємо, запускаємо, пробуємо.
Повний код класу MainActivity буде виглядати так (MainActivity.java):
package com.firestork.coderstat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity < TextView myTextView; Button myButton1; Button myButton2; Button myButton3; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myTextView = (TextView) findViewById(R.id.myTextView); myButton1 = (Button) findViewById(R.id.myButton1); myButton2 = (Button) findViewById(R.id.myButton2); myButton3 = (Button) findViewById(R.id.myButton3); >public void clickMyBtn(View v) < switch (v.getId()) < case R.id.myButton1: myTextView.setText("Ви натиснули на 1-у кнопку"); break; case R.id.myButton2: myTextView.setText("Ви натиснули на 2-ю кнопку"); break; case R.id.myButton3: myTextView.setText("Ви натиснули на 3-ю кнопку"); break; >> >Обробник події безпосередньо при натисканні на кнопку
Всі вище описані методи обробки натискання на кнопку в додатку спрацьовуватимуть після того, як ви приберете палець з кнопки, тобто. на відтискання кнопки. Для того щоб додати обробник безпосередньо при дотику, натисканні, на кнопку необхідно використовувати слухач OnTouchListener(). Спробуємо використовувати його.
У activity_main.xml додамо одну кнопку та текст:
А до класу MainActivity додаємо setOnTouchListener()у метод onCreate():
myButton.setOnTouchListener(new View.OnTouchListener() < @Override public boolean onTouch(View v, MotionEvent event) < if (event.getAction() == MotionEvent.ACTION_DOWN) < myTextView.setText("Ви натиснули на кнопку :)" ); >return false; > >);Метод onTouch() містить параметр MotionEvent, який дозволяє налаштувати обробку залежно від торкання.
ACTION_DOWN - подія торкання екрану (у разі кнопки).
ACTION_UP - відповідно спрацьовує, коли ви приберете палець з екрану (елемента).
Виведемо в TextView інформацію при натисканні на кнопку та відтискання:
myButton.setOnTouchListener(new View.OnTouchListener() < @Override public boolean onTouch(View v, MotionEvent event) < switch (event.getAction()) < case MotionEvent.ACTION_DOWN: myTextView.setText("Ви натиснули на кнопку :)" ); break; case MotionEvent.ACTION_UP: myTextView.setText("Натисніть знову"); break; >return false; > >);Зберігаємо, запускаємо та пробуємо.
Повний код класу MainActivity (MainActivity.java):
package com.firestork.coderstat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity < TextView myTextView; Button myButton; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myTextView = (TextView) findViewById(R.id.myTextView); myButton = (Button) findViewById(R.id.myButton); myButton.setOnTouchListener(new View.OnTouchListener() < @Override public boolean onTouch(View v, MotionEvent event) < switch (event.getAction()) < case MotionEvent.ACTION_DOWN: myTextView.setText("Ви натиснули на кнопку :)" ); break; case MotionEvent.ACTION_UP: myTextView.setText("Натисніть знову"); break; >return false; > >); > >Додатково
Зробити кнопку недоступною
У класі MainActivity у методі onCreate() додаємо наступний код:
myButton.setEnabled(false);Такий код стане в нагоді, якщо необхідно вимкнути кнопку за певних умов.
Також можна вимкнути кнопку в activity_main.xml за допомогою атрибуту android:enabled="false":
Отримати текст кнопки
Button myButton=(Button)view; String myButtonText = myButton.getText().toString();Якщо у вас є питання або пропозиції щодо покращення коду описаного у статті, пишіть у коментарях.
Я завжди відкритий до конструктивного діалогу
