Добавление кнопки в DialogFragment и ее стиль

| 29.03.2014

Мы уже рассматривали ранее создание диалогового окна на основе DialogFragment. Тогда мы просто добавляли текст в диалог. Иногда в диалоговое окно также добавляют кнопки, например, для «отмены» или «подтверждения». В Андроиде уже есть специальные методы для добавления таких кнопок, например:

1
2
3
setNegativeButton(text, listener)
setPositiveButton(text, listener)
setNeutralButton(text, listener)

Работать с ними достаточно просто, но часто возникают трудности со стилизацией таких кнопок. Давайте расширим код, который мы создали ранее, добавив в диалог одну кнопку. Также изменим фон (background) кнопки и цвет шрифта.

Немного видоизменим код SelectDialog.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package ru.androiddocs.alertdialog;
 
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.Button;
 
public class SelectDialog extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 
        builder.setTitle("Window with button")
            .setItems(R.array.numbers, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int which) {
 
                	   MainActivity callingActivity = (MainActivity) getActivity();
                       callingActivity.onUserSelectValue(which);
                       dialog.dismiss();
 
               }
        });
 
        builder.setNegativeButton(R.string.dialog_ok, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                // User cancelled the dialog
            }
        });
 
        return builder.create();
    }
 
    @Override
    public void onStart() {
        super.onStart();        
        Button nButton =  ((AlertDialog) getDialog()).getButton(DialogInterface.BUTTON_NEGATIVE);     
        nButton.setBackgroundColor(getResources().getColor(R.color.button_color));
        nButton.setTextColor(getResources().getColor(R.color.button_text));
    }
}

Здесь мы добавили вызов метода builder.setNegativeButton(), в котором в качестве параметров передаем строковый ресурс для текста кнопки и обработчик клика. Сам обработчик оставляем пустым (при нажатии на кнопке окно будет закрываться). Также мы добавили метод onStart(), который вызывается перед появлением всплывающего окна. В нем мы, собственно, задаем цвет фона и шрифта для кнопки (значения берутся из файла ресурсов).

В файл strings.xml добавим новый строковый ресурс (текст для кнопки):

1
<string name="dialog_ok">Ok</string>

Также создадим новый ресурс-файл colors.xml со следующим содержимым:

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="button_color">#000</color>
   <color name="button_text">#fff</color> 
</resources>

Эти значения мы используем при изменения стиля кнопки. Запустив приложение и кликнув по кнопке для вызова диалога, мы получим следующий результат:

Добавление кнопки в DialogFragment и ее стиль

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*