Северный (Арктический) федеральный университет им. М.В. Ломоносова
Опубликован: 10.04.2014 | Доступ: свободный | Студентов: 7004 / 1389 | Длительность: 14:18:00
Специальности: Программист
Самостоятельная работа 4:

Создание многоэкранного приложения

< Лекция 4 || Самостоятельная работа 4: 12345 || Лекция 5 >

8.3 Создание диалогового окна

1. Создайте новый проект Dialog

2. Создайте кнопку на вашей активности и назовите ее "Выбрать фон" (для этого нужно в файле strings создать строку соответствующего содержания). Присвойте активности и кнопке id.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativelayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <Button
        android:id="@+id/background_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="174dp"
        android:text="@string/bg"/>
</RelativeLayout>
    
Листинг 8.5. Код файла activity_main.xml

3. Наше приложение меняет фон на выбранный. Значит, нам нужно создать цвета и их названия в файле strings.xml. Как вы помните, этот файл находится в папке values, которая в свою очередь находится в папке res. Также создадим строку messages, которая нам понадобятся для диалогового окна.

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Dialog</string>
    <string name="action_settings">Settings</string>
	<string name="bg">Выбрать фон</string>
    <string name="message">Хотите поменять фон?</string>
    <color name="redColor">#FF0000</color>
    <color name="yellowColor">#FFFF00</color>
    <color name="greenColor">#00FF00</color>
    <string name="red">Красный</string>
    <string name="yellow">Жёлтый</string>
    <string name="green">Зелёный</string>
</resources>
    
Листинг 8.6. Файл strings.xml

4. Перейдем в файл MainActivity.java. Создайте следующие переменные:

private Button bgButton;
public RelativeLayout relativeLayout;
Context context;
    

Если компилятор подчеркивает тип и сообщает об ошибке, например, подчеркивает Context, наведите курсор на подчеркнутое слово: должно появиться контекстное меню, предлагающее варианты, как можно исправить ошибку. Выберете Import 'Context', чтобы импортировать библиотеку.

5. Теперь нужно описать, что будет происходить при нажатии на нашу кнопку.

Для начала свяжем объекты из activity_main.xml и переменные в MainActivity.java через idonCreate):

bgButton = (Button)findViewById(R.id.background_button);
relativeLayout = (RelativeLayout)findViewById(R.id.relativelayout);
    

Context - это объект, который предоставляет доступ к базовым функциям приложения.

Добавляем в код

context = MainActivity.this;
    

6. Теперь нужно добавить событие onClick и навесить на кнопку OnClickListener. Добавляем в заголовок класса MainActivity implements OnClickListener. Чтобы связать кнопку и Listener в onCreate пишем

bgButton.setOnClickListener(this);
    

Создадим теперь событие onClick

@Override
    public void onClick(View v){
}
    

В этом объекте создаем собственно диалог и называем его:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(R.string.message);

AlertDialog alert = builder.create();
        alert.show();
    

Мы будем создавать диалоговое окно, предоставляющее пользователю выбор из списка. Для этого потребуется ещё одна переменная, которая сформирует список из имеющихся строк.

final CharSequence[] items = {
getText(R.string.red), getText(R.string.yellow), getText(R.string.green)
};
    

7. Сформируем собственно наш список и зададим еще один Listener, который будет менять цвет фона на выбранный:

builder.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
              switch (item) {
              case 0: { relativeLayout.setBackgroundResource(R.color.redColor); 
              break;}
              case 1: {relativeLayout.setBackgroundResource(R.color.yellowColor);
              break;}
              case 2:   {relativeLayout.setBackgroundResource(R.color.greenColor);
              break;}
              }
    

8. Осталось добавить в каждый case всплывающие окна Toast, и приложение полностью готово!

Toast.makeText(context, R.string.green, Toast.LENGTH_LONG).show();

package com.mypackage.dialog;

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

public class MainActivity extends Activity implements OnClickListener {

    private Button bgButton;
    public RelativeLayout relativeLayout;
    Context context;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bgButton = (Button) findViewById(R.id.background_button);
        bgButton.setOnClickListener(this);
        context = MainActivity.this;
        relativeLayout = (RelativeLayout)findViewById(R.id.relativelayout);
    }

    @Override
    public void onClick(View v) {

        final CharSequence[] items = {getText(R.string.red)  , getText(R.string.yellow),getText(R.string.green) 
                
        };

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(R.string.message);
        builder.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
              switch (item) {
              case 0: { relativeLayout.setBackgroundResource(R.color.redColor);
              Toast.makeText(context, R.string.red, Toast.LENGTH_LONG).show();
                  
              break;}
              case 1: {relativeLayout.setBackgroundResource(R.color.yellowColor);
              Toast.makeText(context, R.string.yellow, Toast.LENGTH_LONG).show();
              
              break;}
              case 2:   {relativeLayout.setBackgroundResource(R.color.greenColor);
              Toast.makeText(context, R.string.green, Toast.LENGTH_LONG).show();
              
              break;}
              }
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
    }
}
    
Листинг 8.7. Код файла MainActivity.java
< Лекция 4 || Самостоятельная работа 4: 12345 || Лекция 5 >
Марат Нуриджанян
Марат Нуриджанян

Пример: Скачать среду можно с сайта для разработчиков Android (http://developer.android.com/sdk/index.html).

Там скачать можно только Android Studio

Владимир Каункин
Владимир Каункин

В самостоятельной работе 2 в примере решения задания некорректно загадывается число (в двух местах), выбирая случайное целое число из диапазона [0, 99] вместо [1, 100], как того требует условие. Кроме того, загадывание числа всё таки лучше вынести в отдельный метод, как мне кажется.