Руководство Android Button
View more Tutorials:
В Android, Button это "контроль пользовательского интерфейса" (user interface control), который используется для выполнения действия, когда пользователь кликает (click) на него.

В иерархии классов, Button это подкласс у TextView, поэтому он наследует все свойства у TextView.

android:textAllCaps
По умолчанию, при отображении содержания, текст у Button превратится в прописные буквы (uppercase), вам нужно настроить android:textAllCaps="false" чтобы удостовериться, что содержание отобразится как в оригинале.
<Button android:id="@+id/button3" android:text="Alarm" android:drawableLeft="@drawable/icon_alarm" android:textAllCaps="false" ... />

android:gravity
Атрибут 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 | |

<Button android:id="@+id/button" android:gravity="center_horizontal|top" android:text="Text" ... />
Icon - android:drawableLef, android:drawableTop,..
Android позволяет вам добавить 4 icon в один Button через атрибуты android:drawableLef, android:drawableTop, android:drawableRight, android:drawableBottom, android:drawableStart, android:drawableEnd.

<Button android:id="@+id/button" android:drawableLeft="@drawable/icon_bus" android:drawableTop="@drawable/icon_railway" android:drawableRight="@drawable/icon_car" android:drawableBottom="@drawable/icon_boat" android:text="Text" ... />
Android 4.1 начинает поддерживать разницу в лэйауте текстов разных языков. Точнее в английском, текст написан слева на право, в то время как в арабском, текст написан справа на лево.

LTR (Left to Right)
В режиме лэйаута LTR (Left to Right): Атрибут android:drawableStart будет работать как android:drawableLeft, и android:drawableEnd будет работать как android:drawableRight.
RTL (Right to Left)
В режиме лэйаута RTL (Right to Left): Атрибут android:drawableStart будет работать как android:drawableRight, и android:drawableEnd будет работать как android:drawableStart.
- TODO Link!
Событие Click (Клик) происходит когда пользователь нажимает (Press down) и отпускает (Release) Button.

Вы можете определить название метода, который будет вызван когда пользователь кликает (click) на Button используя атрибут android.onClick.
<Button android:id="@+id/button_clickMe" android:onClick="onClickHandler" android:text="Click Me" ... />
В то же время, создайте данный метод в классе MainActivity.
// MainActivity public void onClickHandler(View view) { Toast.makeText(this, "You click on 'Click Me' button!", Toast.LENGTH_SHORT).show(); }
Вы так же можете определить метод, который будет вызван, когда пользователь кликает на Button, полностью с Java кодом:
this.buttonClickMe = (Button) this.findViewById(R.id.button_clickMe); this.buttonClickMe.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "You click on 'Click Me' button!", Toast.LENGTH_SHORT).show(); } });
Событие 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 (настройках) устройства, он будет применен ко всем приложениям в системе. Разработчики приложений не могут понять данное значение.
Constant (private) |
Method |
Value
(Milliseconds)
|
DEFAULT_LONG_PRESS_TIMEOUT | 500 | |
ViewConfiguration.getLongPressTimeout() | 500 (default) |
Например: Событие когда пользователь нажимает Long Click (Длинный клик) на Button с помощью Java кода(Заметьте, что вы не можете сделать это с XML).
this.buttonClickMe = (Button) this.findViewById(R.id.button_clickMe); this.buttonClickMe.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { Toast.makeText(MainActivity.this, "You long click on 'Click Me' button!", Toast.LENGTH_SHORT).show(); return true; } });

Если пользователь кликает (click) на View на долгое время (Больше чем LONG_PRESS_TIMEOUT милисекунды), он может генерировать 2 последовательных события это Long-Click и Click.
Метод onLongClick(View) возвращает значение boolean. Если возвращает true, значит вы истратили событие Long-Click, и событие Click, которое происходит после, будет пропущено. Наоборот, если метод onLongClick(View) возвращает значение false, это значит событие Click, которое происходит потом будет выполнено.
Это простой пример, пользователь введет 2 числа и нажмет Button, чтобы посчитать сумму этих 2-х чисел.

Дизайн интерфейса примера:

Выровнить положение компонентов в интерфейсе:

Настроить ID, Text для компонентов в интерфейсе:

activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/textView" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:layout_marginRight="16dp" android:text="Number 1" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/editText_number1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:layout_marginRight="16dp" android:ems="10" android:inputType="number" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView" /> <TextView android:id="@+id/textView2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:layout_marginRight="16dp" android:text="Number 2" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editText_number1" /> <EditText android:id="@+id/editText_number2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginLeft="16dp" android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:layout_marginRight="16dp" android:ems="10" android:inputType="number" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView2" /> <Button android:id="@+id/button_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="Add" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editText_number2" /> </androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package org.o7planning.buttonexample; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewConfiguration; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private EditText editTextNumber1; private EditText editTextNumber2; private Button buttonAdd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.editTextNumber1 = (EditText) this.findViewById(R.id.editText_number1); this.editTextNumber2 = (EditText) this.findViewById(R.id.editText_number2); this.buttonAdd = (Button) this.findViewById(R.id.button_add); this.buttonAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { add2Number(); } }); } private void add2Number() { String str1 = this.editTextNumber1.getText().toString(); String str2 = this.editTextNumber2.getText().toString(); try { double value1 = Double.parseDouble(str1); double value2 = Double.parseDouble(str2); double result = value1 + value2; Toast.makeText(this, "Result: " + result, Toast.LENGTH_SHORT).show(); } catch(Exception e) { Toast.makeText(this, "Error: "+ e, Toast.LENGTH_SHORT).show(); } } }