Учимся использовать диалоговое окно (Alert Dialog)
Главная » Учимся использовать диалоговое окно (Alert Dialog)

В этому простом уроке мы разберемся, как создать такую приятную, и фактически незаменимую штуку, как диалоговое окно. Применение такого типа сообщений можно наблюдать в работе очень многих приложений. Например, открываете вы музыкальный плеер, жмете кнопку "Воспроизвести", а вам выдает окошечко - "Аудио файлы не найдены!" с одной кнопкой, "ОК", например. Вот сегодня мы и научимся такое делать.

Вместо скучного приложения с кнопкой "Тест" и диалоговым окном с текстом "Тест", мы сделаем вот что - создадим приложение - обманку (заставим друга дрожать:)). Сделаем нашему приложению красивый фон, красивое название, чтобы оно максимально смахивало на не сложную игру, создадим одну кнопку "Начать игру". И при нажатии на эту кнопку будет выскакивать диалоговое окно с текстом: "Процессор перегружен!" и внизу одна кнопочка: "Выключить устройство". При этом, при выскакивании диалогового окна будет проигрываться звук ошибки (типа там ошибка в Windows 98). Ну как вам?:) Уверяю вас, не подготовленный пользователь, не знающий, что вы балуетесь программированием на Android, будет в шоке (только берегитесь, чтобы на вас не бросились с кулаками).

Итак, надеюсь, я вас убедил, что будет весело. Начнем. Давайте подготовим необходимые ресурсы. Нам нужно 2 картинки и 1 звук ошибки. Одну картинку используем для создания красивого фона приложения, другую - в диалоговом окне, а также звук, который будет проигрываться при выскакивании диалогового окна. Если вы не хотите копаться в Интернете в поисках подходящих файлов, можете скачать это

Создаем новый проект. Название на вашей совести, желательно чтобы оно было убедительно похоже на игровое (типа "Дурак":)). Создаем Blank Activity

Добавьте картинки с архива (либо свои) в папку drawable приложения (найдите эту папку через в файлах проекта и скопируйте туда изображения).

Давайте создадим главный экран нашего приложения. В файле activity_main.xml настроим фон приложения, а также добавим одну кнопку "Начать игру", напишем ей функцию нажатия onClick и поместим в центре экрана:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".MainActivity"
 android:id="@+id/bg"
 android:background="@drawable/bg">
 <Button
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:id="@+id/bt"
 android:text="Начать игру"
 android:onClick="Game"
 android:layout_centerHorizontal="true"
 android:layout_centerVertical="true"/>
</RelativeLayout>

Мы будем вызывать диалоговое окно при нажатии на кнопку, поэтому создаем метод обработки щелчка - ставим курсов на имя функции щелчка "Game", жмем ALT+ENTER и нажимаем строку Create 'Game(View)' in 'MainActivity':

 Нажатие кнопки

На этом работа в файле activity_main.xml закончена.

Переходим в файл MainActivity.java. Здесь будет происходить, как обычно, вся основная работа. Объявим для начала объекты, которые будем использовать: SoundPool, 2 величины mError и mPlay, которые будут использоваться при проигрывании звука:

 private SoundPool mSound;
 private int mError=1;
 private int mPlay; 

Диалоговое окно создается с помощью объекта AlertDialogВ нашем методе обработки нажатия кнопки "Game" создадим диалоговое окно, которое будет выскакивать при нажатии на кнопку. Настроим основные атрибуты диалогового окна: название окна, иконку, отображаемый текст и одну кнопку для его закрытия.  Код нашего метода "Game" будет выглядеть так:

public void Game(View view) {
 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
 builder.setTitle("Ошибка!")
 .setIcon(R.drawable.er)
 .setMessage("Процессор перегружен!")
 .setCancelable(false)
 .setPositiveButton("Выключить устройство",new DialogInterface.OnClickListener() {
 @Override
 public void onClick(DialogInterface dialog, int which) {
 dialog.cancel();
 }
 });
 AlertDialog Error = builder.create();
 Error.show();
 }

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

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

Для того,чтобы загрузить наш аудио файл в приложение, для него нужно создать папку. Создаем в приложении папку по имени raw (ее адрес res/raw/):

Папка

В эту папку и помещаем наш звуковой файл. 

Теперь нам нужно задействовать объект SoundPool. В методе onCreate добавляем следующее:

mSound = new SoundPool(1, AudioManager.STREAM_MUSIC,0);
mSound.load(this,R.raw.error,1);

В первой строке объявляем сам SoundPool и его настройки:

     - 1 - количество одновременных аудио потоков (1 поток у нас);

     - AudioManager.STREAM_MUSIC - константа из класса AudioManager, указывающая на тип потока;

     - качество кодирования, ставим по умолчанию 0;

Ну и последний штрих, добавляем запуск проигрывания нашего звука в метод обработки нажатия кнопки "Game":

AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
mPlay = mSound.play(mError,1,1,1,0,1);

В скобке (mError,1,1,1,0,1) циферки означают следующее:

     - 1 - громкость левого канала, от 0 до 1.0;

     - 1 - громкость правого канала, от 0 до 1.0;

     - 1 - приоритет данного потока;

     - 0 - количество повторов воспроизведения данного потока, от 0 и до желаемого количества;

     - 1 - скорость воспроизведения, может быть от 0.5 до 2.

Полный код файла MainActivity.java должен выглядеть так:

package home.transitions;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.View;
import android.widget.RelativeLayout;

public class MainActivity extends ActionBarActivity {

 private SoundPool mSound;
 private int mError=1;
 private int mPlay;



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

 mSound = new SoundPool(1, AudioManager.STREAM_MUSIC,0);
 mSound.load(this,R.raw.error,1);

}
 public void Game(View view) {
 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
 builder.setTitle("Ошибка!")
 .setIcon(R.drawable.er)
 .setMessage("Процессор перегружен!")
 .setCancelable(false)
 .setPositiveButton("Выключить устройство",new DialogInterface.OnClickListener() {
 @Override
 public void onClick(DialogInterface dialog, int which) {
 dialog.cancel();
 }
 });
 AlertDialog Error = builder.create();
 Error.show();

 AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
 mPlay = mSound.play(mError,1,1,1,0,1);

 }
}

НУ вот и все, поздравляю! Наше приложение - страшилка успешно создано и отлично работает. Вы можете в этом убедиться, протестировав его на эмуляторе/смартфоне/реальном устройстве.

Окно работающего приложения:

Категория: Уроки программирования | Просмотров: 1669 | Добавил: Oleg | Рейтинг: 5.0/1
Всего комментариев: 1
avatar
1 zobega90 • 10:58, 11.10.2015
Ахаха biggrin Круто smile
Спасибо автору за урок)) smile вот только как сделать 2 кнопки в окне? Я окно поставил на подтвержбение выхода из приложения cry cry
avatar