Главная » Учимся использовать диалоговое окно (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);
}
}
НУ вот и все, поздравляю! Наше приложение - страшилка успешно создано и отлично работает. Вы можете в этом убедиться, протестировав его на эмуляторе/смартфоне/реальном устройстве. Окно работающего приложения: | |
|
Всего комментариев: 1 | |
| |