Вывод сообщения об ошибке android studio

Добавляем картинку
Toast.Callback

Вступление

Что такое тост? Представьте себе картину. За столом собралась большая куча народа и весело отмечает день рождения кота. Стоит шум и гам. Соседи громко разговаривают между собой и не обращают внимания на других. И тут из-за стола поднимается всеми уважаемый человек со стаканом вина и вилочкой стучит по стеклу стакана, чтобы привлечь внимание присутствующих. Шум смолкает и человек произносит тост. Также и в телефоне, когда вы увлечены какой-то задачей, вдруг всплывает сообщение, привлекая ваше внимание. Это и есть Toast. Второй пример — когда вы заряжаете специальный хлеб (тосты) в тостер, то они через определённое время подпрыгивают, сигнализируя о своей готовности. Посмотрим, как это работает в Android.

Теория

Всплывающее уведомление (Toast Notification) является сообщением, которое появляется на поверхности окна приложения, заполняя необходимое ему количество пространства, требуемого для сообщения. При этом текущая деятельность приложения остаётся работоспособной для пользователя. В течение нескольких секунд сообщение плавно закрывается. Всплывающее уведомление также может быть создано службой, работающей в фоновом режиме. Как правило, всплывающее уведомление используется для показа коротких текстовых сообщений.

Практика

Для создания всплывающего уведомления необходимо инициализировать объект Toast при помощи метода Toast.makeText(), а затем вызвать метод show() для отображения сообщения на экране:


// Kotlin
val text = "Пора покормить кота!"
val duration = Toast.LENGTH_SHORT

val toast = Toast.makeText(applicationContext, text, duration)
toast.show()

// Java Toast toast = Toast.makeText(getApplicationContext(), "Пора покормить кота!", Toast.LENGTH_SHORT); toast.show();

Обычно пишут в одну строчку, соединяя вызов методов в цепочку .


// Kotlin
Toast.makeText(applicationContext, text, duration).show()

У метода makeText() есть три параметра:

  • Контекст приложения
  • Текстовое сообщение
  • Продолжительность времени показа уведомления. Можно использовать только две константы

Константы для указания продолжительности показа сообщения

  • LENGTH_SHORT — (По умолчанию) показывает текстовое уведомление на короткий промежуток времени;
  • LENGTH_LONG — показывает текстовое уведомление в течение длительного периода времени.

Если покопаться в исходниках Android, то можно найти такие строчки:


private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds

Как видите, уведомления выводятся на 3 с половиной секунды или на 2 секунды. Других вариантов нет, не пытайтесь использовать другие значения — у вас ничего не получится.

Настройка позиции на экране

По умолчанию стандартное всплывающее уведомление появляется в нижней части экрана. Изменить место появления уведомления можно с помощью метода setGravity(int, int, int). Метод принимает три параметра:

  • стандартная константа для размещения объекта в пределах большего контейнера (например, GRAVITY.CENTER, GRAVITY.TOP и др.);
  • смещение по оси X
  • смещение по оси Y

Например, если вы хотите, чтобы уведомление появилось в центре экрана, то используйте следующий код (до вызова метода show()):

 
toast.setGravity(Gravity.CENTER, 0, 0); 

Для вывода в левом верхнем углу.


toast.setGravity(Gravity.TOP or Gravity.LEFT, 0, 0)

Если нужно сместить уведомление направо, то просто увеличьте значение второго параметра. Для смещения вниз нужно увеличить значение последнего параметра. Соответственно, для смещения вверх и влево используйте отрицательные значения.

Не забывайте про метод show()

Типичная ошибка начинающих программистов — забывают добавить вызов метода show() для отображения сообщения на экране. К счастью, в студии, если вы пропустите метод show(), то строка будет подсвечена, а при подведении указателя мыши к строке увидите:

Метод show()

Kotlin

Метод show()

Java

Пример

Создайте новый проект или используйте любой старый проект из предыдущих занятий. Добавьте на экран активности кнопку и присвойте ей текст Показать Toast. Теперь напишем код:


// Kotlin
// Если этот код работает, его написал Александр Климов,
// а если нет, то не знаю, кто его писал.

package ru.alexanderklimov.hellokot

import android.os.Bundle
import android.view.Gravity
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        val button: Button = findViewById(R.id.button)
        button.setOnClickListener {
            val text = "Пора покормить кота!"
            val duration = Toast.LENGTH_SHORT

            val toast = Toast.makeText(applicationContext, text, duration)
            toast.setGravity(Gravity.CENTER, 0, 0)
        }
    }
}

// Java public void showToast(View view) { //создаём и отображаем текстовое уведомление Toast toast = Toast.makeText(getApplicationContext(), "Пора покормить кота!", Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); }

Запустите приложение и нажмите кнопку. В центре экрана появится на короткое время текстовое сообщение, которое само исчезнет. Очень похоже на поведение чеширского кота.

Начиная с Android 4.4, внешний вид всплывающего сообщения изменился, раньше был прямоугольник без закруглений.

Toast

Для закрепления материала напишем ещё один пример. Удалим предыдущий код для щелчка кнопки и напишем такой код:


// Kotlin
val duration = Toast.LENGTH_LONG

val toast = Toast.makeText(applicationContext, R.string.cat_food, duration)
toast.setGravity(Gravity.TOP, 0, 0)
toast.show()

// Java int duration = Toast.LENGTH_LONG; Toast toast = Toast.makeText(getApplicationContext(), R.string.catfood, duration); toast.setGravity(Gravity.TOP, 0, 0); toast.show();

Я подумал, что вы можете не заметить сообщение, которое показывается слишком мало времени. Поэтому на этот раз я использовал константу LENGTH_LONG, чтобы вы успели обратить внимание на сообщение и покормить наконец несчастного голодного кота. Помимо этого, я поместил текст сообщения в XML-ресурсы, как это рекомендуется всегда делать. Кроме того, сообщение будет выводиться в верхней части экрана.

Добавляем картинку

Как правило, для Toast используются короткие текстовые сообщения. При необходимости вы можете добавить к сообщению и картинку. Используя метод setView(), принадлежащий объекту Toast, вы можете задать любое представление (включая разметку) для отображения.

Начнем с приготовлений. Подготовьте картинку и разместите её в папке res/drawable, как мы делали в уроке с «Hello Kitty». Картинка будет доступна приложению как ресурс через название файла без расширения. Например, я добавил в папку файл с изображением кота hungrycat.jpg и могу получить к нему доступ через выражение R.drawable.hungrycat. Чтобы изображение появилось в стандартном Toast-сообщении, нам потребуется программно создать объект класса ImageView и задать для него изображение из ресурсов с помощью метода setImageResource. Сам по себе стандартный внешний вид Toast состоит из контейнера LinearLayout, в который нужно добавить созданный объект ImageView. Можно задать также позицию, в которую следует вывести изображение. Если указать значение 0, то изображение будет показано выше текста. Код для создания Toast с изображением выглядит следующим образом:


// Kotlin
button.setOnClickListener {
    val toast = Toast.makeText(applicationContext, R.string.cat_food, Toast.LENGTH_LONG)
    toast.setGravity(Gravity.CENTER, 0, 0)

    val toastContainer = toast.view as LinearLayout
    val catImage = ImageView(this)
    catImage.setImageResource(R.drawable.hungrycat)
    toastContainer.addView(catImage, 0)
    toast.show()
}

// Java public void showToast(View view) { Toast toast3 = Toast.makeText(getApplicationContext(), R.string.catfood, Toast.LENGTH_LONG); toast3.setGravity(Gravity.CENTER, 0, 0); LinearLayout toastContainer = (LinearLayout) toast3.getView(); ImageView catImageView = new ImageView(getApplicationContext()); catImageView.setImageResource(R.drawable.hungrycat); toastContainer.addView(catImageView, 0); toast3.show(); }

Toast с картинкой

Вообще, получив доступ к контейнеру, вы можете делать с ним что угодно. Например, сделать его прозрачным. Смотрится интересно.


// Kotlin
val toast = Toast.makeText(applicationContext, "Чеширский кот", Toast.LENGTH_LONG)
val toastContainer = toast.view as LinearLayout
val catImage = ImageView(this)
catImage.setImageResource(R.drawable.hungrycat)
toastContainer.addView(catImage, 0)
// Устанавливаем прозрачность у контейнера
toastContainer.setBackgroundColor(Color.TRANSPARENT)
toast.show()

// Java public void showToast(View view) { Toast toast = Toast.makeText(getApplicationContext(), "Чеширский кот", Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); LinearLayout toastContainer = (LinearLayout) toast.getView(); // Устанавливаем прозрачность у контейнера toastContainer.setBackgroundColor(Color.TRANSPARENT); toast.show(); }

Создание собственных всплывающих уведомлений

В Android 11 (R) метод setView() объявлен устаревшим.

В предыдущем примере мы получили доступ к контейнеру через метод getView(). Можно пойти от обратного — подготовить свой контейнер и внедрить его в объект Toast через метод setView().

Создадим собственный дизайн разметки для сообщения.

Вам нужно создать разметку в файле res/layout/custom_toast.xml.

Определите два дочерних элемента ImageView и TextView:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/custom_toast_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#DAAA"
    android:orientation="vertical"
    android:padding="8dp">

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:scaleType="centerCrop"
        android:src="@drawable/hungrycat" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/cat_food"
        android:textColor="#FFF777" />
</LinearLayout>

Для получения разметки из ХМL-файла и работы с ней в программе используется класс LayoutInflater и его метод getLayoutInflater(), которые возвращает объект LayoutInflater. Затем вызовом метода inflate() получают корневой объект View этой разметки. Например, для файла разметки уведомления с именем custom_toast.xml и его корневого элемента c идентификатором android:id=»@+id/custom_toast_container» код будет таким:


// Kotlin
button.setOnClickListener {
    val inflater = layoutInflater
    val container = findViewById<ViewGroup>(R.id.custom_toast_container)
    val layout: View = inflater.inflate(R.layout.custom_toast, container)
    val text: TextView = layout.findViewById(R.id.text)
    text.text = "Пора покормить кота!"
    with (Toast(applicationContext)) {
        setGravity(Gravity.CENTER_VERTICAL, 0, 0)
        duration = Toast.LENGTH_LONG
        view = layout
        show()
    }
}

// Java // Упрощённо LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.custom_layout, (ViewGroup) findViewById(R.id.toast_layout)); Toast toast = new Toast(getApplicationContext()); toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); toast.setDuration(Toast.LENGTH_LONG); toast.setView(layout); toast.show();

Параметры, передаваемые в метод inflate():

  • идентификатор ресурса макета (custom_toast.xml);
  • идентификатор ресурса корневого элемента (custom_toast_container).

После получения корневого элемента из него можно получить все дочерние элементы методом findViewByid() и определить информационное наполнение для этих элементов.

Затем создаётся объект Toast и устанавливаются нужные свойства, например, Gravity и продолжительность времени показа уведомления.

После этого вызывается свойство view() (Kotlin) или метод setView() (Java), которому передаётся разметка уведомления, и метод show(), чтобы отобразить уведомление с собственной разметкой.

Запустите проект на выполнение. При нажатии кнопки вызова должно появиться на несколько секунд окно уведомления с текстовым сообщением и значком.

Ради интереса можете посмотреть, как выглядит разметка в исходных кода Android.

Toast.Callback

В Android 11 R (API 30) добавили возможность отслеживания момента, когда сообщение появляется и скрывается при помощи Toast.Callback.


button.setOnClickListener {
    val alertToast = Toast.makeText(this, "Пора покормить кота", Toast.LENGTH_SHORT)
    alertToast.addCallback(object: Toast.Callback() {
        override fun onToastShown() {
            super.onToastShown()
            Log.d("Toast", "shown")
        }

        override fun onToastHidden() {
            super.onToastHidden()
            Log.d("Toast", "hidden")
        }
    })
    alertToast.show()
}

Ещё раз напомню, что метод setView() в Android 11 признан устаревшим. А также вообще рекомендуют не использовать собственные виды всплывающих сообщений, а ограничиться простыми текстовыми сообщениями. Иначе можно нарваться на системные ограничения.

Использование уведомлений Toast в рабочих потоках

Как элемент графического интерфейса Toast должен быть вызван в потоке GUI, иначе существует риск выброса межпотокового исключения. В листинге объект Handler используется для гарантии того, что уведомление Toast было вызвано в потоке GUI.


// Java
private void mainProcessing() {
    Thread thread = new Thread(null, doBackgroundThreadProcessing,
            "Background");
	thread.start();
}

private Runnable doBackgroundThreadProcessing = new Runnable() {
    public void run() {
        backgroundThreadProcessing();
    }
};

private void backgroundThreadProcessing() {
    handler.post(doUpdateGUI);
}

// Объект Runnable, который вызывает метод из потока GUI
private Runnable doUpdateGUI = new Runnable() {
    public void run() {
        Context context = getApplicationContext();
        String msg = "To open mobile development!";
        int duration = Toast.LENGTH_SHORT;
        Toast.makeText(context, msg, duration).show();
    }
};						 

Дополнительные сведения

Напоследок хочу предупредить об одной потенциальной проблеме. При вызове сообщения нужно указывать контекст в первом параметре метода makeText(). В интернете и, возможно и у меня на сайте будет попадаться пример makeText(MainActivity.this, …). Ошибки в этом нет, так как класс Activity является потомком Context и в большинстве случаев пример будет работать. Но иногда я получаю письма от пользователей, которые жалуются на непонятное поведение сообщения, когда текст не выравнивается, обрезается и т.д. Это связано с тем, что активность может использовать определённую тему или стиль, которые вызывают такой побочный эффект. Поэтому я рекомендую вам использовать метод getApplicationContext().

Второй момент — фрагменты, которые будете изучать позже, не являются потомками контекста. Если вы захотите вызвать всплывающее сообщение в фрагменте, то проблема может поставить вас в тупик. Вам нужно добавить новую переменную класса Activity через метод getActivity():


Activity activity = getActivity();
Toast.makeText(activity, "Кота покормили?", Toast.LENGTH_SHORT).show();

Такое же может случиться при вызове всплывающих сообщений из диалоговых окон, которые тоже не относятся к классу Context. Вместо getApplicationContext() также можно вызывать метод getBaseContext().

Заключение

Сегодня вы научились выводить всплывающие сообщения на экран, а также получили образец кода, который вы обязаны вставлять в любое ваше приложение, чтобы пользователи никогда не забывали кормить своего питомца.

Дополнительные материалы

Обсуждение урока на форуме

Пример частично цветного текста в Toast через Spannable

GrenderG/Toasty: The usual Toast, but with steroids — библиотека, позволяющая создавать продвинутые сообщения

Реклама

guys I have a problem with implement error handling in my application.
I want to display the error message to the user of my application when the response code from rest is not 200. In other words: If the connection is wrong, I want to display the message, that the user have to check his internet connection and try again. If everything is fine I want to do everything as usual so load the content.

I write something like this:

Toast errorToast = Toast.makeText(NewsActivity.this, "Error, pls chech your internet connection and try again!", Toast.LENGTH_SHORT);
errorToast.show();

and this:

if(response.getStatusLine().getStatusCode() == 200){}

But i don’t know If this is good code and where should I insert it. I will be very grateful for your help and advice.

This is this code:

public class NewsActivity extends Activity {

private static final String URL = "http://10.0.2.2:8083/rest/aktualnosci";

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

    new FetchItems().execute();
}

private class FetchItems extends AsyncTask<String, Void, JSONArray> {

    protected JSONArray doInBackground(String... params) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet(URL);
        httpget.setHeader("Content-type", "application/json");

        JSONArray json = new JSONArray();

        try {
            HttpResponse response = httpclient.execute(httpget);
                json = new JSONArray(EntityUtils.toString(response.getEntity()));
                return json;
            }

        } catch (Exception e) {
            Log.v("Błędne wczytanie", e.getMessage());
        }

        return json;
    }

    protected void onPostExecute(JSONArray result) {
        ListView lst = (ListView) findViewById(R.id.aktualnosci_list);
        ArrayList<String> listItems = new ArrayList<String>();
        String contentToEdit;
        String titleContainer;
        TextView newsHeaderTextView = null;
        for (int i = 0; i < result.length(); i++) {
            try {
                titleContainer = result.getJSONObject(i).getString("title").toString();
                listItems.add(titleContainer);
                contentToEdit=result.getJSONObject(i).getString("body").toString();
                contentToEdit= Html.fromHtml(contentToEdit).toString();
                listItems.add(contentToEdit);

            } catch (Exception e) {
                Log.v("Błędne wczytanie1", e.getMessage());
            }
        }

        ArrayAdapter ad = new ArrayAdapter(NewsActivity.this, android.R.layout.simple_list_item_1, listItems);
        lst.setAdapter(ad);
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

}

LogCat Window is the place where various messages can be printed when an application runs. Suppose, you are running your application and the program crashes, unfortunately. Then, Logcat Window is going to help you to debug the output by collecting and viewing all the messages that your emulator throws. So, this is a very useful component for the app development because this Logcat dumps a lot of system messages and these messages are actually thrown by the emulator.

This means, that when you run your app in your emulator, then you will see a lot of messages which include all the information, all the verbose messages, and all the errors that you are getting in your application. Suppose, an application of about 10000 lines of code gets an error. So, in that 10000 line codes, to detect the error Logcat helps by displaying the error messages.

Errors in different modules and methods can be easily detected with the help of the LogCat window.

Using LogCat window:

The LogCat prints an error using a Log Class. The class which is used to print the log messages is actually known as a Log Class. So, this class is responsible to print messages in the Logcat terminal.

There are lots of methods that are present in the log class:

v(String, String)

verbose

d(String, String)

debug

i(String, String)

information

w(String, String)

warning

e(String, String)

error

All these methods contain two parameters in them. The first and second both are the string. When you print the log messages with these different methods, then you will get a corresponding color according to the method.

Method The output will be printed in 

verbose

black

debug

blue

information

green

warning

red

error

orange

The verbose method is of very lesser priority and error is of higher priority. Thus, the method’s priority increases from verbose to error.

Syntax:

// for verbose Log.v("TAG", "MESSAGE");
// for debug Log.d("TAG", "MESSAGE");
// for information Log.i("TAG", "MESSAGE");
// for warning Log.w("TAG", "MESSAGE");
// for error Log.e("TAG", "MESSAGE");

For Example, A verbose log message can be written as:

Log.v("MainActivity", "We are under the Main Activity");

Last Updated :
30 Aug, 2022

Like Article

Save Article

Пользователям часто нужны напоминания,
которые будут указывать на выбор или
ошибки. Для этого в Android есть специальная
встроенная программа, которая гибко
настраивается под любые задачи – android
studio всплывающее окно. При помощи сервиса
удается экономить память и другие
ресурсы, создавая заголовки, информационный
массив, клавиши и прочее.

Что такое
Android Studio? Это специальная среда
IDE, которая позволит работать, настраивать
и управлять операционной системой
Android.

Android Studio: всплывающее диалоговое окно AlertDialog

С одной клавишей

Для начала
следует разобраться с легким примером,
в котором используется только 1 клавиша.
Первым делом формируется
объем AlertDialog.Builder, передающий в виде
примера контекст. После в работу входит
техника Builder и формируется для всплывающего
меню заголовок, используя команду
setTitle(). Для текста подходит способ
setMessage(), установка значка формируется
в виде setIcon(). Чтобы установить клавишу,
применяется техника setNegativeButton(), а
обеспечить возможность нажатия на
сделанную кнопку поможет комбинация
cancel(). Обращать внимание на название
техник не нужно, они не несут большой
нагрузки.

android studio всплывающее окно

Для исключения
закрытия диалогового окна при помощи
кнопки возврата на смартфоне, применяется
метод setCancelable() со значением false. В
самом конце требуется добиться всплывания
окна при помощи команды show(). Например:

public void onClick(View v) {
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    builder.setTitle("Важное сообщение!")
            .setMessage("Закройте окно!")
            .setIcon(R.drawable.ic_android_cat)
            .setCancelable(false)
            .setNegativeButton("ОК, иду на балкон",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    });
    AlertDialog alert = builder.create();
    alert.show();
}

Особенности создания и пример с 2 клавишами

На основе кода видно пример формирования диалогового окна с наличием 2 клавиш для использования:

package ru.alexanderklimov.alertdialogdemo;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnClickListener;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

    AlertDialog.Builder ad;
    Context context;

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

        context = MainActivity.this;
        String title = "Выбор есть всегда";
        String message = "Выберите одежду";
        String button1String = "Удобная одежда";
        String button2String = "Красивая одежда";
        
        ad = new AlertDialog.Builder(context);
        ad.setTitle(title);  // заголовок
        ad.setMessage(message); // сообщение
        ad.setPositiveButton(button1String, new OnClickListener() {
            public void onClick(DialogInterface dialog, int arg1) {
                Toast.makeText(context, "Вы сделали правильный выбор",
                        Toast.LENGTH_LONG).show();
            }
        });
        ad.setNegativeButton(button2String, new OnClickListener() {
            public void onClick(DialogInterface dialog, int arg1) {
                Toast.makeText(context, "Возможно вы правы", Toast.LENGTH_LONG)
                        .show();
            }
        });
        ad.setCancelable(true);
        ad.setOnCancelListener(new OnCancelListener() {
            public void onCancel(DialogInterface dialog) {
                Toast.makeText(context, "Вы ничего не выбрали",
                        Toast.LENGTH_LONG).show();
            }
        });
    }

    public void onClick(View v) {
        ad.show();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

Общие параметры кода не меняются, прежними будут настройки, клавиши и обработка информации. Доступно добавлять в AlertDialog только по 1 клавише любого вида, поэтому в окне будет максимум 3 кнопки для использования.

android studio alertdialog

Для каждого показателя применяются методы со вставкой set…Button, принимающие за основу подпись и внешний вид DialogInterface.OnClickListener, характеризующий операцию при касании. Чтобы исключить закрытие с помощью клавиатуры смартфона, в коде прописывается setCancelable() со значением false или true. Чтобы результат работы отобразился на экране, применяется способ show().

AlertDialog – гибкая программа для настроек. Всплывающее окно бывает самым простым с классическим выбором «Да» и «Нет», но при помощи перечня, флажков или переключателей, конструкция будет усложняться.

Метод onCreateDialog в AlertDialog

Чтобы при помощи android studio alertdialog сохранило состояние, потребуется применять способ активности onCreateDialog(). Для начала выполняются описанные этапы, а для показа работы указывается builder.create(). Пример кода:

package ru.alexanderklimov.alertdialogdemo;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnClickListener;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

    AlertDialog.Builder ad;
    Context context;
    
    // идентификатор диалогового окна AlertDialog с кнопками
    private final int IDD_THREE_BUTTONS = 0;

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

       ...
    }

    public void onClick(View v) {
        //ad.show();
        showDialog(IDD_THREE_BUTTONS); 
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case IDD_THREE_BUTTONS:
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("Выберите правильный ответ")
                    .setCancelable(false)
                    .setPositiveButton("Да",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    dialog.cancel();
                                }
                            })
                    .setNeutralButton("Не знаю",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    dialog.cancel();
                                }
                            })
                    .setNegativeButton("Нет",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    dialog.cancel();
                                }
                            });
            
            return builder.create();
        default:
            return null;
        }
    }
}

Поскольку в одном приложении применяется сразу несколько типов диалоговых окон, потребуется сделать отдельный идентификатор, который поможет вызывать конкретный диалог. Работая на новой ОС Android видно, что метод показа всплывающего окна перечеркнут, поскольку он устаревший. С версии 3.0 пользуются техникой DialogFragment. Для проекта идентификатором выступает IDD_THREE_BUTTONS.

android studio dialog

AlertDialog с перечнем

Некоторым пользователям важно использовать окна, в которых будет список с несколькими строками на выбор. Они заменяют клавиши, и для этого в коде применяют способ setItems(). В нем указывается часть информации для вывода на экран и dialogInterface.OnClickListener, позволяющий выбрать действие, во время выбора конкретной части из перечня. Для этого готовый код дополняется еще одной клавишей:

private final int IDD_LIST_CATS = 1;

public void onClick(View v) {
    switch (v.getId()) {
    ...
    case R.id.button2:
        showDialog(IDD_LIST_CATS);
        break;
    ...
}

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    ...

    case IDD_LIST_CATS:
        
        final String[] mCatsName ={"Тимка", "Пушок", "Кузя"};

        builder = new AlertDialog.Builder(this);
        builder.setTitle("Выбираем кота"); // заголовок для диалога

        builder.setItems(mCatsName, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int item) {
                // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(),
                        "Выбранный кот: " + mCatsName[item],
                        Toast.LENGTH_SHORT).show();
            }
        });
        builder.setCancelable(false);
        return builder.create();
        
    default:
        return null;
    }
}

После выполнения проекта android studio alertdialog со списком, проводится запуск для проверки. Во время контакта с клавишей должно быть окно AlertDialog, в котором содержится перечень из 3 наименований, помогающий выбрать имя питомца. После касания одного выплывает сообщение, демонстрирующее выбранного питомца.

android studio диалоговое окно

AlertDialog с переключателями

Всплывающее меню можно сделать с переключателями RadioButton. Для этого применяется техника setSingleChoiceitems() взамен способу setItems(). Если при помощи android studio диалоговое окно делается внутри onCreateDialog(), тогда операционная система Андроид будет управлять состоянием перечня при помощи переключателей. На момент активной работы, меню при дальнейших вызовах сохранит в памяти, ранее выбранные строки.

private final int IDD_RADIO_CATS = 2;

// часть кода из onCreateDialog()
case IDD_RADIO_CATS:
    
    final String[] mChooseCats = { "Тимка", "Пушок", "Кузя" };
    builder = new AlertDialog.Builder(this);
    builder.setTitle("Выберите любимое имя кота")
            .setCancelable(false)

            // добавляем одну кнопку для закрытия диалога
            .setNeutralButton("Назад",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int id) {
                            dialog.cancel();
                        }
                    })

            // добавляем переключатели
            .setSingleChoiceItems(mChooseCats, -1,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog,
                                int item) {
                            Toast.makeText(
                                    getApplicationContext(),
                                    "Любимое имя кота: "
                                            + mChooseCats[item],
                                    Toast.LENGTH_SHORT).show();
                        }
                    });
    return builder.create();

Создавая проект нужно обратить внимание на детали. Когда выбирается переключатель, всплывающее окно не будет закрываться, нужно заранее продумать этот момент и технику закрытия. К примеру, возможно добавить клавишу. Вторым фактором при использовании способа setSingleChoiceitems выступает то, что для первого значения применяется полный код и настройки, а для второго нужно применить целочисленный показатель индекса, оставляя его включенным всегда при всплывании окна. Значение «-1» применяется для отключения переключателей во время старта окна.

android studio alertdialog со списком

AlertDialog с флажками

Описанные переключатели возможно заменить флажками, которые называются CheckBox. Чтобы получить доступ к выбору параметров, необходимо применить код setMultiChoiceItems(). Визуально изменений почти нет, а детали можно просмотреть в самом коде:

private final int IDD_CHECK_CATS = 3;

// часть кода из onCreateDialog()
case IDD_CHECK_CATS:
    final boolean[] mCheckedItems = { false, true, false };
    final String[] checkCatsName = { "Тимка", "Пушок", "Кузя" };
    builder = new AlertDialog.Builder(this);
    builder.setTitle("Выберите котов")
            .setCancelable(false)

            .setMultiChoiceItems(checkCatsName, mCheckedItems,
                    new DialogInterface.OnMultiChoiceClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog,
                                int which, boolean isChecked) {
                            mCheckedItems[which] = isChecked;
                        }
                    })

            // Добавляем кнопки
            .setPositiveButton("Готово",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog,
                                int id) {
                            StringBuilder state = new StringBuilder();
                            for (int i = 0; i < checkCatsName.length; i++) {
                                state.append("" + checkCatsName[i]);
                                if (mCheckedItems[i])
                                    state.append(" выбранn");
                                else
                                    state.append(" не выбранn");
                            }
                            Toast.makeText(getApplicationContext(),
                                    state.toString(), Toast.LENGTH_LONG)
                                    .show();
                        }
                    })

            .setNegativeButton("Отмена",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog,
                                int id) {
                            dialog.cancel();

                        }
                    });
    return builder.create();

Первое значение в способе setMultiChoiceItems() выступает массивом настроек для перечня с флажками.

Android Studio: всплывающее диалоговое окно AlertDialog

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

final boolean[] mCheckedItems = {false, true, false};

По аналогии с переключателями для всплывающего меню с флажками потребуется применять клавиши для закрытия меню. В запущенном приложении сохраняется предыдущий параметр состояния.

Автоматическое закрытие окна

Обычные сообщения класса Toast закрываются через 1-2 секунды, но диалоговые окна не будут самостоятельно закрываться, пока пользователь не сделает манипуляцию.

Android Studio: всплывающее диалоговое окно AlertDialog

При использовании таймера можно убрать ограничение, добавляя клавишу автоматического закрытия. Для этого используется специальный код.

public void onClick(View v) {
    AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
    builder.setTitle("Автоматическое закрытие окна");
    builder.setMessage("Через пять секунд это окно закроется автоматически!");
    builder.setCancelable(true);

    final AlertDialog dlg = builder.create();

    dlg.show();

    final Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        public void run() {
            dlg.dismiss(); // when the task active then close the dialog
            timer.cancel(); // also just top the timer thread, otherwise,
                            // you may receive a crash report
        }
    }, 5000); // через 5 секунд (5000 миллисекунд), the task will be active.
}

AlertDialog с рейтингом (проблемный пример)

Применение метода RatingBar для диалогового окна приводит к некорректной работе кода. На дисплее смартфона всегда всплывает 6 звездочек, невзирая на заданные параметры. Если перевернуть приложение в альбомную ориентацию, то будет показано от 7 звездочек, исходя из диагонали.

Android Studio: всплывающее диалоговое окно AlertDialog

public TextView txtView;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);

    txtView = (TextView) findViewById(R.id.textView1);

}

public void onClick(View v) {
    showRatingDialog();
}

public void showRatingDialog() {
    final AlertDialog.Builder ratingdialog = new AlertDialog.Builder(this);
    final RatingBar rating = new RatingBar(this);
    
    ratingdialog.setIcon(android.R.drawable.btn_star_big_on);
    ratingdialog.setTitle("Голосуем за любимое имя!");
    ratingdialog.setView(rating);
    rating.setMax(5);
    rating.setNumStars(5);
    rating.setStepSize((float) 1.0);

    ratingdialog.setPositiveButton("Готово",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    txtView.setText(String.valueOf(rating.getRating()));
                    dialog.dismiss();
                }
            })

            .setNegativeButton("Отмена",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    });

    ratingdialog.create();
    ratingdialog.show();
}

Для решения проблемы нужно элемент RatingBar поместить в макете wrap_content. Рекомендуется сделать отдельную разметку, с подключением ее к всплывающему окну. Для открытия доступа к настройкам элемента используется метод View.findViewById().

Следует избегать ProgressDialog

Android studio dialog – стандартный класс для всех всплывающих окон. ProgressDialog – это расширение, но оно тоже имеет специальные клавиши, а также индикатор выполненных задач. Но если потребуется показать процесс загрузки или любой другой информации, тогда используется отдельная инструкция по дизайну, что позволяет применять расширение в созданном макете.

Android Studio: всплывающее диалоговое окно AlertDialog

Все классы позволяют установить стиль, структуру диалогового окна, но для этого применяется DialogFragment, как отдельный элемент. Эта группа дает возможность работы со всеми функциями, которые требуются для формирования всплывающих окон, их дизайном, вместо вызова способов к объекту Dialog.

Применение в работе для управления DialogFragment позволяет добиться корректной обработки жизненных событий в определенное время, поскольку можно задать дополнительные клавиши «Назад» или повернуть экран. Еще класс позволяет повторно использовать интерфейс в виде встраиваемого элемента высшего уровня, по аналогии с классом Fragment. Это требуется при необходимости разного отображения окон на экранах больших и малых устройств.

В результате того, что описанный класс первоначально есть в Android 3.0, в нем будет описано применение класса DialogFragment, которое есть в Библиотеке поддержки. После ее добавления можно воспользоваться самим классом и другими API на гаджетах под управлением ОС Android 1.6 и выше. Если применяются вспомогательные библиотеки, рекомендуется провести импорт класса android.support.v4.app.DialogFragment, но не использовать android.app.DialogFragment.

На видео детально представлены диалоговые окна и программирование Андроид:

В этом уроке мы:

— рассмотрим логи приложения и всплывающие сообщения

Создадим проект:

Project name: P0121_LogAndMess
Build Target: Android 2.3.3
Application name: LogAndMess
Package name: ru.startandroid.develop.logandmess
Create Activity: MainActivity

Создадим в main.xml экран, знакомый нам по прошлым урокам про обработчики:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="horizontal">
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_margin="30dp">
        <TextView
            android:layout_width="wrap_content"
            android:text="TextView"
            android:layout_height="wrap_content"
            android:id="@+id/tvOut"
            android:layout_gravity="center_horizontal"
            android:layout_marginBottom="50dp">
        </TextView>
        <Button
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:id="@+id/btnOk"
            android:text="OK"
            android:layout_width="100dp">
        </Button>
        <Button
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:id="@+id/btnCancel"
            android:text="Cancel"
            android:layout_width="100dp">
        </Button>
    </LinearLayout>
</LinearLayout>

Алгоритм приложения будет тот же. По нажатию кнопок меняется текст. Обработчик  — Activity.

public class MainActivity extends Activity implements OnClickListener {

  TextView tvOut;
  Button btnOk;
  Button btnCancel;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // найдем View-элементы
    tvOut = (TextView) findViewById(R.id.tvOut);
    btnOk = (Button) findViewById(R.id.btnOk);
    btnCancel = (Button) findViewById(R.id.btnCancel);

    // присваиваем обработчик кнопкам
    btnOk.setOnClickListener(this);
    btnCancel.setOnClickListener(this);
  }

  @Override
  public void onClick(View v) {
    // по id определяем кнопку, вызвавшую этот обработчик
    switch (v.getId()) {
    case R.id.btnOk:
      // кнопка ОК
      tvOut.setText("Нажата кнопка ОК");
      break;
    case R.id.btnCancel:
      // кнопка Cancel
      tvOut.setText("Нажата кнопка Cancel");
      break;
    }
  }

}

Сохраним, запустим. Убедимся, что все работает.

Логи приложения

Когда вы тестируете работу приложения, вы можете видеть логи работы. Они отображаются в окне LogCat. Чтобы отобразить окно откройте меню Window > Show View > Other … В появившемся окне выберите Android > LogCat

Должна появится вкладка LogCat

Рассмотрим эту вкладку подробней. Логи имеют разные уровни важности: ERROR, WARN, INFO, DEBUG, VERBOSE (по убыванию). Кнопки V D I W E (в кружках) – это фильтры и соответствуют типам логов. Опробуйте их и обратите внимание, что фильтр показывает логи не только своего уровня, но и уровней более высокой важности. Также вы можете создавать, редактировать и удалять свои фильтры – это мы рассмотрим чуть дальше.

Давайте смотреть, как самим писать логи. Делается это совсем несложно с помощью класса Log и его методов Log.v() Log.d() Log.i() Log.w() and Log.e(). Названия методов соответствуют уровню логов, которые они запишут.

Изменим код MainActivity.java. Возьмем все каменты из кода и добавим в DEBUG-логи с помощью метода Log.d. Метод требует на вход тэг и текст сообщения. Тэг – это что-то типа метки, чтобы легче было потом в куче системных логов найти именно наше сообщение. Добавим описание тега (TAG) и запишем все тексты каментов в лог.

public class MainActivity extends Activity implements OnClickListener {

  TextView tvOut;
  Button btnOk;
  Button btnCancel;

  private static final String TAG = "myLogs";

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // найдем View-элементы
    Log.d(TAG, "найдем View-элементы");
    tvOut = (TextView) findViewById(R.id.tvOut);
    btnOk = (Button) findViewById(R.id.btnOk);
    btnCancel = (Button) findViewById(R.id.btnCancel);

    // присваиваем обработчик кнопкам
    Log.d(TAG, "присваиваем обработчик кнопкам");
    btnOk.setOnClickListener(this);
    btnCancel.setOnClickListener(this);
  }

  @Override
  public void onClick(View v) {
    // по id определяем кнопку, вызвавшую этот обработчик
    Log.d(TAG, "по id определяем кнопку, вызвавшую этот обработчик");
    switch (v.getId()) {
    case R.id.btnOk:
      // кнопка ОК
      Log.d(TAG, "кнопка ОК");
      tvOut.setText("Нажата кнопка ОК");
      break;
    case R.id.btnCancel:
      // кнопка Cancel
      Log.d(TAG, "кнопка Cancel");
      tvOut.setText("Нажата кнопка Cancel");
      break;
    }
  }

}

Eclipse ругнется, что не знает класс Log. Обновите импорт (CTRL+SHIFT+O) и, если спросит, выберите android.util.Log. Запустим приложение, понажимаем кнопки и посмотрим логи

Видно, что все отлично записалось. Чтобы сделать просмотр удобней, создадим свой фильтр. Жмем значок +

Имя фильтра произвольное, например, «My logs».  Log Tag – это как раз значение константы TAG, которая описана в нашем коде и использовалась в методе Log.d, т.е. — «myLogs«. Pid оставляем пустым, это id процесса. Уровень поставим Debug

и жмем OK. Появилась новая вкладка My logs, на которой отображаются логи, соответствующие только что созданному фильтру.

Мы помещали в лог текст, но разумеется, вы можете писать, например, значения интересующих вас переменных (приведенные к типу String).

Иногда бывает, что логи не отображаются во вкладке LogCat, хотя AVD запущен, приложение работает без проблем. В таком случае должно помочь следующее: в Eclipse идем в меню Window > Open Perspective > Other > DDMS. Откроется немного другой набор окон чем обычно. Там найдите вкладку Devices и в ней должно быть видно ваше AVD-устройство, кликните на него и логи должны появиться. Чтобы вернуться в разработку: Window > Open Perspective > Java.

Всплывающие сообщения

Приложение может показывать всплывающие сообщения с помощью класса Toast. Давайте подредактируем метод onClick. Сделаем так, чтобы всплывало сообщение о том, какая кнопка была нажата.

  public void onClick(View v) {
    // по id определяем кнопку, вызвавшую этот обработчик
    Log.d(TAG, "по id определяем кнопку, вызвавшую этот обработчик");
    switch (v.getId()) {
    case R.id.btnOk:
      // кнопка ОК
      Log.d(TAG, "кнопка ОК");
      tvOut.setText("Нажата кнопка ОК");
      Toast.makeText(this, "Нажата кнопка ОК", Toast.LENGTH_LONG).show();
      break;
    case R.id.btnCancel:
      // кнопка Cancel
      Log.d(TAG, "кнопка Cancel");
      tvOut.setText("Нажата кнопка Cancel");
      Toast.makeText(this, "Нажата кнопка Cancel", Toast.LENGTH_LONG).show();
      break;
    }
  }

Разберем синтаксис вызова. Статический метод makeText создает View-элемент Toast. Параметры метода:

context – пока не будем вдаваться в подробности, что это такое и используем текущую Activity, т.е. this.
text – текст, который надо показать
duration – продолжительность показа (Toast.LENGTH_LONG — длинная, Toast.LENGTH_SHORT — короткая)

Toast создан и чтобы он отобразился на экране, вызывается метод show(). Сохраняем, запускаем, проверяем.

Если у вас есть Андроид-смартфон, я думаю вы уже видели подобные сообщения. Теперь вы знаете, как это делается )

На следующем уроке:

— создаем пункты меню


Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Compose, Kotlin, RxJava, Dagger, Тестирование, Performance 

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня


Alert Dialog in an android UI prompts a small window to make decision on mobile screen. Sometimes before making a decision it is required to give an alert to the user without moving to next activity. To solve this problem alert dialog came into practise. For example you have seen this type of alert when you try to exit the App and App ask you to confirm exiting.
Alert Dialog Example In Android Studio


AlertDialog.Builder Components Used In Alert Dialog

AlertDialog.Builder is used to create an interface for Alert Dialog in Android for setting like alert title, message, image, button, button onclick functionality etc.

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

Alert Dialog ComponentsBelow are the components of Alert Dialog:

1. setTitle(CharSequence title) – This component is used to set the title of the alert dialog. It is optional component.

  // Setting Alert Dialog Title
        alertDialogBuilder.setTitle("Confirm Exit..!!!");

2. setIcon(Drawable icon) – This component add icon before the title. You will need to save image in drawable icon.

 // Icon Of Alert Dialog
        alertDialogBuilder.setIcon(R.drawable.question);

3. setMessage(CharSequence message) – This component displays the required message in the alert dialog.

  // Setting Alert Dialog Message
        alertDialogBuilder.setMessage("Are you sure,You want to exit");

4. setCancelable(boolean cancelable) – This component has boolean value i.e true/false. If set to false it allows to cancel the dialog box by clicking on area outside the dialog else it allows.

  alertDialogBuilder.setCancelable(false);

Custom Alert Dialog Component In Android Studio
5. setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener) – This component add positive button and further with this user confirm he wants the alert dialog question to happen.

  alertDialogBuilder.setPositiveButton("yes", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface arg0, int arg1) {
                                finish();
                            }
                        });

6. setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener) – This component add negative button and further with this user confirm he doesn’t want the alert dialog question to happen.

alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Toast.makeText(MainActivity.this,"You clicked over No",Toast.LENGTH_SHORT).show();
                            }
                        });

7. setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener) – This component simply add a new button and on this button developer can set any other onclick functionality like cancel button on alert dialog.

 alertDialogBuilder.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Toast.makeText(getApplicationContext(),"You clicked on Cancel",Toast.LENGTH_SHORT).show();
                            }
                         });

Alert Dialog Example In Android Studio

Below is the example of Alert Dialog in which the functionality of Alert Dialog is defined over button click. In this example we have used a simple button and on that button click the alert dialog window will appear.

Below you can download code, see final output and step by step explanation of Alert Dialog example in Android Studio.

Download Code

Alert Dialog Example In Android Studio
Step 1: Create a new project and name it AlertDialogExample.

Step 2: Open res -> layout -> activity_main.xml (or) main.xml and add following code:

Here we add the button UI on click of which alert dialog will appear. We also used textview for asking user to click on button.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.alertdialogexample.MainActivity">

    <Button
        android:text="@string/exit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:onClick="exit"
        android:textStyle="normal|bold" 
        style="@style/Widget.AppCompat.Button.Colored"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="131dp"/>

    <TextView
        android:text="@string/click_over_button_to_exit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="68dp"
        android:id="@+id/textView2"
        android:layout_above="@+id/button"
        android:layout_centerHorizontal="true"
        android:textSize="18sp"
        android:textStyle="normal|bold"
        android:gravity="center" />
</RelativeLayout>

Step 3 : Now open app -> java -> package -> MainActivity.java and add the below code.

In this step firstly AlertDialog.Builder is used to create a interface like setting alert title, message, image, button, button onclick functionality etc.

Important Note: Add a image to the drawable folder before setting the alert dialog icon.

package com.example.alertdialogexample;

import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void exit(View view){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        // Setting Alert Dialog Title
        alertDialogBuilder.setTitle("Confirm Exit..!!!");
        // Icon Of Alert Dialog 
        alertDialogBuilder.setIcon(R.drawable.question);
        // Setting Alert Dialog Message
        alertDialogBuilder.setMessage("Are you sure,You want to exit");
        alertDialogBuilder.setCancelable(false);

                alertDialogBuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface arg0, int arg1) {
                                finish();
                            }
                        });

                alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Toast.makeText(MainActivity.this,"You clicked over No",Toast.LENGTH_SHORT).show();
                            }
                        });
                alertDialogBuilder.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Toast.makeText(getApplicationContext(),"You clicked on Cancel",Toast.LENGTH_SHORT).show();
                            }
                         });

        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }
}

Output:

Now run the App and click on the button. The alert dialog will appear asking user to confirm if he wants to exit App. If user click on ‘No’, he remains in the App and if he click on ‘Yes’ the user will get exit from the App.


Custom Alert Dialog:

The custom dialog uses DIALOG to create custom alert in android studio. Dialog display a small window i.e a popup which draws the user attention over the activity before they continue moving forward. For more details read custom dialog tutorial

Alert Dialog Vs Custom Alert Dialog in Android

Continue Reading Below Tutorial

  • ExpandableListAdapter Tutorial With Example In Android Studio
  • BaseExpandableListAdapter Tutorial With Example In Android Studio
  • SimpleExpandableListAdapter Tutorial With Example In Android Studio
  • MultiAutoCompleteTextView Tutorial With Example In Android Studio
  • Switch Tutorial With Example In Android Studio

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Вывод ошибок формы django
  • Вывод ошибок вордпресс
  • Вывод ошибок валидации laravel
  • Вывод ошибок php лог

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии