В продолжение статьи Android. Работа с кнопками (Button), событие нажатия на кнопку в мобильном приложении, создадим простое приложение, генератор отмазок, для закрепления умений работы с элементом Button.

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/excuseView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:gravity="center"
        android:layout_centerVertical="true"
        android:layout_alignParentStart="true" />

    <Button
        android:id="@+id/createNewExcuseBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Нужна отмазка"
        android:onClick="createNewExcuse"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp" />

</RelativeLayout>

Как и в предыдущем примере добавим описание TextView и Button в класс MainActivity (MainActivity.java), объявляем:

Button createNewExcuseBtn;
TextView excuseView;

Так же добавим массив с отмазками (при желании можно его расширить или изменить полностью):

String[] list = new String[]{
    "Это странно….",
    "Такого никогда не было раньше!",
    "Это работало вчера.",
    "Как это возможно?",
    "Это аппаратная проблема.",
    "Что вы делали не правильного, чтобы оно сломалось?",
    "Проблема в ваших данных, а не в программе!",
    "Не может быть, я не трогал этот модуль очень давно!",
    "У вас ошибочная версия программы.",
    "Вероятно, это неудачное стечение обстоятельств...",
    "Я не могу протестировать всё!",
    "Это не может быть причиной этого.",
    "Это работает, но никогда не тестировалось.",
    "Кто-то изменил мой код... Такое часто было когда работали без системы контроля версий",
    "Вы проверили на вирусы вашу систему?",
    "Не смотря на то, что она не работает, какие у вас от нее ощущения?",
    "Хотя она и не работает, но как же она офигенна?",
    "Вы не можете использовать эту версию на вашей системе.",
    "Зачем вы это нажимали?",
    "Чего вы делали чтобы это программа упала?",
    "А на моей машине работает!",
    "Это не бага, это фича!",
    "Это у вас Windows глючит!",
    "Попробуйте перезагрузить компьютер или переустановите Windows.",
    "Мне начать решать эту проблему или заниматься текущем улучшением?",
    "А чистили кэш?",
    "На самом деле я ответственный и хороший специалист. А то, что я ничего не сделал - так это я был занят и болел",
    "Все уже было почти готово. Но у меня появился вариант получше, поэтому я решил переделать. Но потом я передумал",
    "Мы сдали проект на 4 месяца позже, чтобы порадовать вас в День рождения. Поздравляем!",
    "Вот скажу честно: \"Про@@@л\". Да, про@@@л. И это риски бизнеса, вы должны были это учесть. Я честно вам говорю, что произошло, потому главное в работе - прозрачность. со своей стороны постараюсь сейчас не про@@@ть.",
    "Не отвечал потому, что мой телефон остался в машине у друга, и я не мог его вызвонить что бы он мне его привез обратно.",
    "Это просто тестовая база, на рАбочей все будет нормально",
    "Дизайнеры нарисовали макеты не по гайдам и мне пришлось неделю перерисовывать всё самому. Но верстальщик к тому вРемени уже всё сверстал и пришлось перевёрстывать.",
    "Как, вы не получили мой отчёт??? Я отправил его в 14.48, наверное почта заглючила, письмо попало в спам и уничтожилось! Вот беда... А у себя-то я ничего не сохранил, неужели придётся все заново делать???",
    "Я семь дней не брал трубку, так как проходил обряд молчания, простите что не предупредил",
    "Простите что не отвечал. Я живу в частном доме и у нас вырубило свет на пару дней. А у меня электроворота, которые без света не работают, так что я не мог выехать и предупредить вас",
    "Я хотел сделать, но забыл, а когда вспомнил, не смог сделать.",
    "Проект будет готов без пятнадцати четыре, возможно в пол пятого, крайний срок в пять. Двадцать минут шестого. Утра.",
    "По частям у меня все готово, просто нужно собрать в один проект."
};

Инициализируем их в методе onCreate():

createNewExcuseBtn = (Button) findViewById(R.id.createNewExcuseBtn);
excuseView = (TextView) findViewById(R.id.excuseView);

Добавим метод createNewExcuse() с выводом случайном отмазки после нажатия на кнопку. Для начала добавим выбор случайной отмазки из массива list:

int n = (int)Math.floor(Math.random() * list.length);

Теперь переменная n содержит случайный индекс элемента массива с отмазками list. Добавляем вывод отмазки:

excuseView.setText(list[n]);

Таким образом метод createNewExcuse() будет содержать следующий код:

public void createNewExcuse(View view) {
    int n = (int)Math.floor(Math.random() * list.length);
    excuseView.setText(list[n]);
}

Подробный пример о том как получить случайный элемент массива в Java: Java. Как выбрать случайный элемент массива.

Полный код класса MainActivity (MainActivity):

package com.firestork.excuse;

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 {

    Button createNewExcuseBtn;
    TextView excuseView;

    String[] list = new String[]{
            "Это странно….",
            "Такого никогда не было раньше!",
            "Это работало вчера.",
            //...
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        createNewExcuseBtn = (Button) findViewById(R.id.createNewExcuseBtn);
        excuseView = (TextView) findViewById(R.id.excuseView);
    }

    public void createNewExcuse(View view) {
        int n = (int)Math.floor(Math.random() * list.length);
        excuseView.setText(list[n] + ' ' + list[n].length());
    }
}

Вот что получится:

Можно немного улучшить, добавим изменение текста на кнопке после первого нажатия с "Нужна отмазка" на "Нужна еще отмазка!". Для этого добавляем в метод createNewExcuse() код который это сделает:

createNewExcuseBtn.setText("Нужна еще отмазка!");

Так же изменим размер шрифта текста отмазки в зависимости от его длины (например: >50 символов, размер 50sp; >100, размер 30sp; ...):

int l = list[n].length();
if (l < 50) {
    excuseView.setTextSize(50);
} else if (l < 100) {
    excuseView.setTextSize(30);
} else if (l < 150) {
    excuseView.setTextSize(25);
} else {
    excuseView.setTextSize(20);
}

Код метода createNewExcuse() будет следующим:

public void createNewExcuse(View view) {

    int n = (int)Math.floor(Math.random() * list.length);
    int l = list[n].length();

    if (l < 50) {
        excuseView.setTextSize(50);
    } else if (l < 100) {
        excuseView.setTextSize(30);
    } else if (l < 150) {
        excuseView.setTextSize(25);
    } else {
        excuseView.setTextSize(20);
    }

    excuseView.setText(list[n]);
}

Подробнее о том как управлять размером текста в приложении: Android. Как получит и установить размер текста элемента.

Запускаем и пробуем. Вот что должно получиться:

Полный код класса MainActivity (MainActivity.java):

package com.firestork.excuse;

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 {

    Button createNewExcuseBtn;
    TextView excuseView;

    String[] list = new String[]{
            "Это странно….",
            "Такого никогда не было раньше!",
            "Это работало вчера.",
            //...
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        createNewExcuseBtn = (Button) findViewById(R.id.createNewExcuseBtn);
        excuseView = (TextView) findViewById(R.id.excuseView);
    }

    public void createNewExcuse(View view) {

        int n = (int)Math.floor(Math.random() * list.length);
        int l = list[n].length();

        if (l < 50) {
            excuseView.setTextSize(50);
        } else if (l < 100) {
            excuseView.setTextSize(30);
        } else if (l < 150) {
            excuseView.setTextSize(25);
        } else {
            excuseView.setTextSize(20);
        }

        excuseView.setText(list[n]);
    }
}

На свое усмотрение можете улучшить приложение. Удачи и успехов в разработки под Android.