Notice: iconv() [function.iconv]: Detected an illegal character in input string in /home/dkwsorgu/domains/dkws.org.ua/public_html/demo/library.php on line 218

Notice: iconv() [function.iconv]: Detected an illegal character in input string in /home/dkwsorgu/domains/dkws.org.ua/public_html/demo/library.php on line 192

Notice: iconv() [function.iconv]: Detected an illegal character in input string in /home/dkwsorgu/domains/dkws.org.ua/public_html/demo/library.php on line 169
Диалоговые РѕРєРЅР° РІ Android 4 Рё 5 - Сайт Дениса Колисниченко
 

Облачный хостинг VDS за 2 минуты

Настоящий облачный VDS-хостинг от UltraVDS: тестируем производительность

Диалоговые окна в Android 4 и 5


© Денис Колисниченко

В этой статье мы рассмотрим диалоги следующих типов:

  • AlertDialog - диалог СЃ кнопками;
  • DatePickerDialog - диалог выбора даты;
  • TimePickerDialog - диалог выбора времени.

1. AlertDialog

Самый частый вариант применения диалога AlertDialog вЂ” это классический диалог РІРѕРїСЂРѕСЃР° СЃ кнопками Да Рё Нет. Р’РѕС‚ сейчас Рё займемся его разработкой. РџСЂРё запуске наше приложение отобразит диалог, РїСЂРё нажатии РєРЅРѕРїРєРё Нет РЅРµ будет произведено никаких действий вЂ” будет вызван метод cancel(). Рђ РІРѕС‚ действие РїСЂРё нажатии РєРЅРѕРїРєРё Да запрограммируете РІС‹ сами вЂ” РЅРѕ РїРѕР·Р¶Рµ, РєРѕРіРґР° научитесь устанавливать интернет-соединения. Взгляните, как будет выглядеть наш диалог РЅР° СЂРёСЃ. 1.

Код приложения, отображающего этот диалог, представлен в листинге 1.

dkws.org.ua

Р РёСЃ. 1. Диалог типа AlertDialog

Листинг 1. Отображение диалога типа AlertDialog

package com.sample.dialog;

import android.support.v7.app.ActionBarActivity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.content.DialogInterface;

import android.app.AlertDialog;

public class MainActivity extends ActionBarActivity {

В В В  @Override

В В В  protected void onCreate(Bundle savedInstanceState) {

В В В В В В В  super.onCreate(savedInstanceState);

В В В В В В В  setContentView(R.layout.activity_main);

В В В В В В В 

В В В В В В В  AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);

         // Сообщение диалога

           alt_bld.setMessage("Подключиться к dkws.org.ua ?")

В В В В В В В В В В  .setCancelable(false)

           .setPositiveButton("Да", new DialogInterface.OnClickListener() {

В В В В В В В В В В  public void onClick(DialogInterface dialog, int id) {

           // Действие для кнопки Да

В В В В В В В В В В  }

В В В В В В В В В В  })

           .setNegativeButton("Нет", new DialogInterface.OnClickListener() {

В В В В В В В В В В  public void onClick(DialogInterface dialog, int id) {

           //  Действие для кнопки Нет

В В В В В В В В В В  dialog.cancel();

В В В В В В В В В В  }

В В В В В В В В В В  });

В В В В В В В В В В  AlertDialog alert = alt_bld.create();

В В В В В В В В В В  // Title for AlertDialog

           alert.setTitle("Соединение");

В В В В В В В В В В  // Icon for AlertDialog

В В В В В В В В В В  alert.setIcon(R.drawable.ic_launcher);

В  В В В В В В В В В alert.show();

В В В  }

}

Далее мы рассмотрим диалоги выбора даты и времени.

2. DatePickerDialog

Диалоги выбора даты и времени очень "многострадальные". С ними вечно все не так. Мало того, что код вызова такого диалога довольно непростой, так еще и меняется из версии в версию API. Так, для показа диалога ранее использовался метод ShowDialog(), который сейчас использовать не рекомендуется. Вместо него нужно использовать вот такую конструкцию, вовлекающую метод show():

DatePickerDialog dpg =В  new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);

dpg.show();

А что, если нужно, чтобы программа была максимально совместима со всеми версиями? Тогда нужно использовать ShowDialog() и в то же время обеспечить, чтобы среда разрешила компиляцию. Для этого нужно добавить директиву @SuppressWarnings("deprecation"). Да, решение не очень хорошее, но зато работает от API 8 (2.x) до API 21 (5.0).

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

http://developer.android.com/guide/topics/ui/controls/pickers.html

Само приложение тоже очень простое. Оно содержит только надпись с призывом выбрать дату (рис. 2). При щелчке по надписи открывается диалог выбора даты (рис. 3), а после выбора даты и нажатия кнопки Done выбранная пользователем дата отображается в надписи (рис. 4).

dkws.org.ua

Р РёСЃ. 2. Щелкните РїРѕ надписи для выбора даты

dkws.org.ua

Р РёСЃ. 3. Диалог выбора даты

dkws.org.ua

Р РёСЃ. 4. Выбранная дата отображена РІ текстовой надписи

Разметка приложения приведена РІ листинге 2, Р° Java-РєРѕРґ приложения вЂ” РІ листинге 3.

Листинг 2. Разметка приложения

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

<LinearLayout

В В  xmlns:android="http://schemas.android.com/apk/res/android"

В В  android:layout_width="fill_parent"

В В  android:layout_height="fill_parent"

В  В android:orientation="vertical">

<TextView

В В  android:id="@+id/tvDate"

В В  android:layout_width="fill_parent"

В В  android:layout_height="wrap_content"

В В  android:clickable="true"

В В  android:onClick="onclick"

   android:text="Нажмите для выбора даты"

В В  android:textSize="22sp">

</TextView>

</LinearLayout>

Листинг 3. Выбор даты

package com.sample.selectdatedlg;

import android.app.Activity;

import android.app.DatePickerDialog;

import android.app.DatePickerDialog.OnDateSetListener;

import android.app.Dialog;

import android.os.Bundle;

import android.view.View;

import android.widget.DatePicker;

import android.widget.TextView;

public class MainActivity extends Activity {

В 

В  int DIALOG_DATE = 1;

  // Дата для инициализации (можно получить через Calendar текущую, но

  // я старался сделать код как можно проще).

В  int myYear = 2014;

  int myMonth = 10;   // ноябрь, нумерация месяцев начинается с 0!

В  int myDay = 03;

В  TextView tvDate;

В 

В В В  public void onCreate(Bundle savedInstanceState) {

В В В В В В В  super.onCreate(savedInstanceState);

В В В В В В В  setContentView(R.layout.activity_main);

В В В В В В В  tvDate = (TextView) findViewById(R.id.tvDate);

В В В  }

// Добавил директиву, чтобы среда не "ругалась" на старый код    

В В В  @SuppressWarnings("deprecation")

В В В  public void onclick(View view) {

В В В В В  showDialog(DIALOG_DATE);

В В В  }

В В В 

В В В  @SuppressWarnings("deprecation")

В В В  protected Dialog onCreateDialog(int id) {

В В В В В  if (id == DIALOG_DATE) {

В В В В В В В  DatePickerDialog tpd = new DatePickerDialog(this, myCallBack, myYear, myMonth, myDay);

В В В В В В В  return tpd;

В В В В В  }

В В В В В  return super.onCreateDialog(id);

В В В  }

В В В 

В В В  OnDateSetListener myCallBack = new OnDateSetListener() {

В В В  public void onDateSet(DatePicker view, int year, int monthOfYear,

В В В В В В В  int dayOfMonth) {

В В В В В  myYear = year;

      // увеличиваем полученный месяц для отображения

В В В В В  myMonth = monthOfYear + 1;В  В В В В В В 

В В В В В  myDay = dayOfMonth;

      tvDate.setText("Дата " + myDay + "/" + myMonth + "/" + myYear);

В В В  }

В В В  };

}

 

3. TimePickerDialog

Сейчас напишем приложение выбора времени, но оно будет немного отличаться от предыдущего (dkws.org.ua). Вместо надписи у нас будет кнопка, вызывающая диалог выбора времени (рис. 5), а выбранное время будет отображено в качестве уведомления (рис. 6). Разметка приложения приведена в листинге 4а, а полный код приложения - в листинге 4б.

Листинг 4а. Разметка приложения

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

В В В  android:orientation="vertical"

В В В  android:layout_width="fill_parent"

В В В  android:layout_height="fill_parent"

В В В  >

    <Button android:text="Выберите время"

В В В  android:id="@+id/button1"

В В В  android:layout_width="wrap_content"

В В В  android:layout_height="wrap_content">

</Button>

</LinearLayout>

Листинг 4б. Выбор времени (код приложения)

package com.sample.timeselect;

import android.app.Activity;

import android.os.Bundle;

import android.app.Dialog;

import android.app.TimePickerDialog;

import android.widget.Button;

import android.widget.TimePicker;

import android.widget.Toast;

import android.view.View;

public class MainActivity extends Activity {

В В В В В В В  private Button b1;

В В В В В В В  static final int TIME_DIALOG_ID = 0;

В В В В В В В  @Override

В В В В В В В  В protected void onCreate(Bundle savedInstanceState) {

В В В В В В В В В В В В В В В  super.onCreate(savedInstanceState);

В В В В В В В В В В В В В В В  setContentView(R.layout.activity_main);

В В В В В В В В В В В В В В В  // РљРЅРѕРїРєР°

В В В В В В В В В В В В В В В  b1 = (Button) findViewById(R.id.button1);

В В В В В В В В В В В В В В В  b1.setOnClickListener(new View.OnClickListener() {

                // Обработчик нажатия кнопки — вызываем диалог

В В В В В В В В В В В В В В В В В В В В В В В  @SuppressWarnings("deprecation")

В В В В В В В В В В В В В В В В В В В В В В В  public void onClick(View v) {

В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В  showDialog(TIME_DIALOG_ID);

В В В В В В В В В В В В В В В В В В В В В В В  }

В В В В В В В  В });

В В В В В В В  В }

В В В В В В В 

В В В В В В В  В private TimePickerDialog.OnTimeSetListener mTimeSetListener =

В В В В В В В  В new TimePickerDialog.OnTimeSetListener() {

         // Обработчик нажатия кнопки Set диалога выбора времени (dkws.org.ua)

В В В В В В В  В  public void onTimeSet(TimePicker view, int hourOfDay,

В  int minute) {

        // Отображаем уведомление с выбранным пользователем временем

В В В В В В В  В В В  Toast.makeText(MainActivity.this,

В В В В В В В  В В В  В В В В В В В В В В В  "Time is="+hourOfDay+":"+minute,

В В В В В В В  В В В  В В В В В В В В В В В  Toast.LENGTH_LONG).show();

В В В В В В В  В }

В В В В В В В  В };

В В В В В В В  В @Override

В В В В В В В  В protected Dialog onCreateDialog(int id) {

В В В В В В В В В В В В В В В  В switch (id) {

В В В В В В В В В В В В В В В  В В В В В В В  case TIME_DIALOG_ID:

return new TimePickerDialog(this, mTimeSetListener, 0, 0, false);

В В В В В В В В В В В В В В В  В }

В В В В В В В  В return null;

В В В В В В В  В }

}


dkws.org.ua

Р РёСЃ. 5. Диалог выбора времени

dkws.org.ua

Р РёСЃ. 6. Выбранное пользователем время