Android: Alert Dialog trong Android


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Một Dialog là một cửa sổ nhỏ gợi ý người dùng đưa ra quyết định hoặc nhập thông tin bổ sung.

Đôi khi trong ứng dụng của mình, có thể bạn muốn yêu cầu người dùng lựa chọn quyết định 'có' hoặc 'không' để phản hồi bất cứ action cụ thể nào nhưng vẫn giữ nguyên Activity và không thay đổi màn hình hiện tại, khi này bạn có thể sử dụng đến Alert Dialog.

Để tạo một Alert Dialog, bạn cần tạo một đối tượng AlertDialogBuilder, đây là lớp nội bộ của AlertDialog. Cú pháp như sau:

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

Sau đó bạn phải thiết lập nút 'có' hoặc 'không' bằng sử dụng các phương thức sau của đối tượng lớp AlertDialogBuilder:

alertDialogBuilder.setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)
alertDialogBuilder.setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener)

Ngoài những phương thức này, bạn có thể sử dụng các phương thức được cung cấp bởi lớp Builder để tùy chỉnh Alert Dialog của mình. Bảng dưới đây liệt kê các phương thức này:

Stt Phương thức type & Miêu tả
1 setIcon(Drawable icon)

Phương thức này thiết lập icon của Alert Dialog

2 setCancelable(boolean cancel able)

Phương thức này thiết lập thuộc tính mà Dialog là bị cancel hoặc không

3 setMessage(CharSequence message)

Phương thức này thiết lập thông điệp để được hiển thị trong Alert Dialog

4 setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListener listener)

Phương thức này thiết lập danh sách item để được hiển thị trong Dialog. Tùy chọn sẽ được thông báo bởi Listener

5 setOnCancelListener(DialogInterface.OnCancelListener onCancelListener)

Phương thức này thiết lập hàm callback sẽ được gọi nếu Dialog bị cancel

6 setTitle(CharSequence title)

Phương thức này thiết lập Title xuất hiện trong Dialog

Sau khi tạo và thiết lập Dialog Builder, ta sẽ tạo một Alert Dialog xuất hiện trên màn hình điện thoại bằng cách gọi phương thức create() của lớp Builder đó. Cú pháp như sau:

AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();

Dialog Fragment

Trước khi đi vào một ví dụ cụ thể, chúng ta cần biết về Dialog Fragment. Dialog Frament là một Fragment mà có thể hiển thị fragment trong hộp thoại Dialog.

public class DialogFragment extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Sử dụng lớp Builder để dễ dàng hơn khi tạo hộp thoại
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                toast.makeText(this,"enter a text here",Toast.LENTH_SHORT).show();
            }
        })
                .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        finish();
                    });
                    // Tạo đối tượng AlertDialog và trả nó về nơi gọi
         return builder.create();
                }
    }
}

List dialog

List dialog được sử dụng để hiển thị danh sách các mục trong một Dialog. Giả sử người dùng cần lựa chọn một item từ danh sách hoặc cần click vào item từ danh sách. Lúc này ta có thể sử dụng List Dialog như sau:

public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle(Pick a Color)

            .setItems(R.array.colors_array, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    // Đối số 'which' chứa vị trí theo chỉ số của của mục được chọn
                }
            });
    return builder.create();
}

List Dialog dạng Single-choice

Dạng single-choice được sử dụng để thêm một danh sách dạng single-choice tới hộp Dialog. Chúng ta có thể kiểm tra hoặc không kiểm tra mỗi lựa chọn của người dùng.

public Dialog onCreateDialog(Bundle savedInstanceState) {
    mSelectedItems = new ArrayList();
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    builder.setTitle("This is list choice dialog box");
    .setMultiChoiceItems(R.array.toppings, null,new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {

            if (isChecked) {
                // Nếu người dùng check một mục thì nó sẽ được đưa vào danh mục được lựa chọn
                mSelectedItems.add(which);
            }

            else if (mSelectedItems.contains(which)) {
                // Nếu không thì nếu nó đã có trong danh mục được lựa chọn thì xóa nó đi
                mSelectedItems.remove(Integer.valueOf(which));
            }
        }
    })

    // Cài đặt cho nút 'OK'
    .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int id) {
            // Khi người dùng nhấn nút OK thì sẽ lưu các mục được chọn và đâu đó
            // hoặc trả về component đã mở hộp thoại
            //...
        }
    })

    .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int id) {
            //...
        }
    });
    return builder.create();
}

Ví dụ áp dụng

Ví dụ sau minh họa việc sử dụng của Alert Dialog trong Android.

Sau đây là nội dung của file MainActivity.java:

package v1study.com.alertdialogv1study;

import android.content.DialogInterface;
import android.view.View;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

    public void open(View view){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setMessage("Bạn có chắc chắn muốn ẩn ứng dụng không?");
        //Tạo nút Không
        alertDialogBuilder.setPositiveButton("Không", new DialogInterface.OnClickListener() {
            //Khi nhấn sẽ tạo thông báo
            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                Toast.makeText(MainActivity.this,"Bạn đã nhấn nút Không",Toast.LENGTH_LONG).show();
            }
        });
        //Tạo nút Có
        alertDialogBuilder.setNegativeButton("Có",new DialogInterface.OnClickListener() {
            //Khi nhấn sẽ đóng hộp thoại
            @Override
            public void onClick(DialogInterface dialog, int which) {
                finish(); //Rời khỏi ứng dụng
            }
        });

        alertDialogBuilder.create().show();
        //alertDialog.show();
    }
}

Nội dung của file activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/alert_dialog_demo"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" app:layout_constraintHorizontal_bias="0.496"
            app:layout_constraintVertical_bias="0.094" android:textSize="30sp" android:textStyle="bold"
            android:textColor="#4CAF50"/>
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/alert_dialog_demo"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" app:layout_constraintHorizontal_bias="0.496"
            app:layout_constraintVertical_bias="0.731" android:textSize="30sp" android:textStyle="bold"
            android:textColor="#4CAF50" android:id="@+id/buttonAlertDialog" android:onClick="open"/>
    <ImageView
            android:layout_width="270dp"
            android:layout_height="270dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" app:layout_constraintHorizontal_bias="0.496"
            app:layout_constraintVertical_bias="0.396" android:id="@+id/textView" tools:srcCompat="@drawable/logo_v1"
            android:contentDescription="@string/logo_v1study" app:srcCompat="@drawable/logo_v1"/>

</androidx.constraintlayout.widget.ConstraintLayout>

Chạy ứng dụng Android vừa tạo ở trên:

Alert Dialog trong Android

Bạn nhấn nút "ALERT  DIALOG" sẽ hiện ra dialog như sau:

Alert Dialog

Nếu bạn nhấn nút Không sẽ cho kết quả như sau:

Alert Dialog trong Android

Nếu bạn chọn nút Có thì phương thức finish() sẽ được gọi và sẽ đóng ứng dụng.

» Tiếp: Animation trong Android
« Trước: DatePicker trong Android
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!