Руководство Android Button

View more Tutorials:

1- Android Button

В 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.CLIP_HORIZONTAL clip_horizontal  
Gravity.FILL_HORIZONTAL fill_horizontal  
     
Gravity.TOP top  
Gravity.CENTER_VERTICAL center_vertical  
Gravity.BOTTOM bottom  
Gravity.CLIP_VERTICAL clip_vertical  
Gravity.FILL_VERTICAL fill_vertical  
     
Gravity.START start  
Gravity.END end  
Gravity.CENTER center  
Gravity.FILL fill  
<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!

2- Button Click Event

Событие  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();
    }
});

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 (настройках) устройства, он будет применен ко всем приложениям в системе. Разработчики приложений не могут понять данное значение.
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, которое происходит потом будет выполнено.

4- Пример Android Button

Это простой пример, пользователь введет 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();
        }
    }

}

View more Tutorials: