Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách tắt Dialog khi click ra ngoài trên Android

Giới thiệu

Mặc định, AlertDialog trong Android cho phép tắt khi chạm ra ngoài (outside touch). Ví dụ này minh họa cách kiểm soát hành vi này thông qua phương thức setCanceledOnTouchOutside().

Các bước thực hiện

Bước 1: Tạo dự án mới

Android Studio → File → New Project → Empty Activity.

Bước 2: Giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
        android:id="@+id/click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Mở Dialog"
        android:textSize="30sp" />

</LinearLayout>

Bước 3: Logic chính (src/MainActivity.java)

package com.example.myapplication;

import android.annotation.TargetApi;
import android.content.DialogInterface;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    TextView text;

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        text = findViewById(R.id.click);
        text.setOnClickListener(v -> showAlertDialog());
    }

    private void showAlertDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Thông báo");
        builder.setMessage("Bạn có muốn đóng dialog này không?");
        builder.setIcon(R.mipmap.ic_launcher); // Dùng icon mặc định

        builder.setPositiveButton("Có", (dialog, which) ->
                Toast.makeText(this, "Đã bấm Có", Toast.LENGTH_SHORT).show());

        builder.setNegativeButton("Không", (dialog, which) -> {
            // Không làm gì, dialog tự đóng
        });

        AlertDialog dialog = builder.create();
        // QUAN TRỌNG: false = KHÔNG tắt khi click ra ngoài, true = CÓ tắt
        dialog.setCanceledOnTouchOutside(false);
        dialog.show();
    }
}

Giải thích quan trọng

Phương thứcGiá trịHành vi
setCanceledOnTouchOutside(true)true (mặc định)Click ra ngoài → Dialog tắt
setCanceledOnTouchOutside(false)falseClick ra ngoài → Dialog KHÔNG tắt, buộc phải bấm nút

Ví dụ gốc đặt false để bắt buộc người dùng phải chọn Có/Không.

Bước 4: Chạy ứng dụng

Nhấn Run. Màn hình hiển thị TextView "Mở Dialog". Nhấn vào → hiện AlertDialog. Thử click ra ngoài vùng dialog → dialog không tắt (vì setCanceledOnTouchOutside(false)). Phải bấm "Có" hoặc "Không" mới đóng.

Cách tắt Dialog khi click ra ngoài trên Android

Cách tắt Dialog khi click ra ngoài trên Android

Mẹo bổ sung

  • Để không cho tắt bằng nút Back: dialog.setCancelable(false).
  • Tùy chỉnh layout dialog: builder.setView(R.layout.custom_dialog).