Подготовка

Создаем проект, выбираем Empty Activity, Activity Name: MainActivity, Layout Name: activity_main. В лайоуте /res/layout/activity_main.xml оставляем вывод текста TextView, добавляем кнопку Button и прописываем для каждого элемента свой id. После нажатия на кнопку будем выводить текст в TextView, который покажет, что событие было обработано.

В итоге /res/layout/activity_main.xml будет выглядеть примерно следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="com.firestork.coderstat.MainActivity">

    <TextView
        android:id="@+id/myTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/myButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click me" />

</android.support.constraint.ConstraintLayout>

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) {
    myTextView.setText("Все ок)");
}

Далее в методе onCreate() назначим обработчик для кнопки, в качестве параметра передаем this, т.е. текущий объект:

myButton.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 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(this);
    }

    @Override
    public void onClick(View v) {
        myTextView.setText("Все ок)");
    }
}

3 способ. Обработка события нажатия с помощью атрибута onClick

В данном способе необходимо добавить атрибут onClick для нужной кнопки, есть несколько способов добавления этого атрибута:

1) Открываем activity_main.xml, во вкладке "Design" жмем на нужную кнопку и в окне "Properties", ищем свойство onClick и вводим в пустое поле название метода для обработки события нажатия кнопки.

2) Или откройте файл activity_main.xml в режиме "Text" и добавьте в элемент Button атрибут onClick с названием метода обработки нажатия кнопки:

android:onClick="clickMyBtn"

В обоих случаях, код файла activity_main.xml будет выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="com.firestork.coderstat.MainActivity">

    <TextView
        android:id="@+id/myTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/myButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="clickMyBtn"
        android:text="Click me" />

</android.support.constraint.ConstraintLayout>

Далее открываем класс MainActivity (MainActivity.java) и добавляем код метода clickMyBtn():

public void clickMyBtn(View view) {
    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);
    }

    public void clickMyBtn(View view) {
        myTextView.setText("Все ок)");
    }
}

3 в 1. Все 3 способа в одном примере

Далее для закрепления можно реализовать все три способа на одном экране, для этого в main_activity.xml добавим 3 кнопки, по одной кнопке на каждый способ, (полный код main_activity.xml):

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="com.firestork.coderstat.MainActivity">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/myButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1 способ"
            android:layout_weight="1"
            />

        <Button
            android:id="@+id/myButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="2 способ"
            android:layout_weight="1"
             />

        <Button
            android:id="@+id/myButton3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="3 способ"
            android:layout_weight="1"
            android:onClick="clickMyBtn"
           />

    </LinearLayout>

    <TextView
        android:id="@+id/myTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

И сам класс 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("Вы использовали 1-й способ");
            }
        };

        myButton1.setOnClickListener(oMyButton);

        myButton2.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        myTextView.setText("Вы использовали 2-й способ");
    }

    public void clickMyBtn(View view) {
        myTextView.setText("Вы использовали 3-й способ");
    }
}

Сохраняем, запускаем, проверяем.

Один обработчик нажатия для нескольких кнопок

Часто необходимо сделать один обработчик нажатия для нескольких кнопок, т.к. функционал может практически не отличаться. Приведем пример для всех 3-х способов.

Один обработчик нажатия кнопки для 1-го способа, setOnClickListener

И так в main_activity.xml имеются 3 кнопки:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="com.firestork.coderstat.MainActivity">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/myButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Кнопка 1"
            android:layout_weight="1"
            />

        <Button
            android:id="@+id/myButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Кнопка 2"
            android:layout_weight="1"
             />
        <Button
            android:id="@+id/myButton3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Кнопка 3"
            android:layout_weight="1"
           />

    </LinearLayout>

    <TextView
        android:id="@+id/myTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

Открываем класс 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", для всех кнопок один метод:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="com.firestork.coderstat.MainActivity">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/myButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Кнопка 1"
            android:layout_weight="1"
            android:onClick="clickMyBtn"
            />

        <Button
            android:id="@+id/myButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Кнопка 2"
            android:layout_weight="1"
            android:onClick="clickMyBtn"
            />

        <Button
            android:id="@+id/myButton3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Кнопка 3"
            android:layout_weight="1"
            android:onClick="clickMyBtn"
           />

    </LinearLayout>

    <TextView
        android:id="@+id/myTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

В класс 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 добавим одну кнопку и текст:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="com.firestork.coderstat.MainActivity">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
   
        <Button
            android:id="@+id/myButton3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Кнопка"
            android:layout_weight="1"
           />

    </LinearLayout>

    <TextView
        android:id="@+id/myTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

А в класс 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
    android:id="@+id/myButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Кнопка"
    android:layout_weight="1"
    android:enabled="false"
    />

Получить текст кнопки

Button myButton= (Button)view;
String myButtonText = myButton.getText().toString();
myTextView.setText(myButtonText);