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

ProgressDialog trong Android (Dialog hiển thị tiến trình)

Hướng dẫn này trình bày cách sử dụng ProgressDialog để hiển thị hộp thoại tiến trình (loading) trong Android. Lưu ý quan trọng: ProgressDialog đã bị deprecated từ API 26 (Android 8.0) và không khuyến khích sử dụng trong ứng dụng hiện đại. Thay vào đó, nên dùng ProgressBar trong layout hoặc Material Design Components như ProgressIndicator.

Các bước thực hiện (chỉ để tham khảo mã nguồn cũ)

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

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.

Bước 2: Layout (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
</RelativeLayout>

Bước 3: Code MainActivity (src/MainActivity.java)

import android.app.ProgressDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    ProgressDialog progressDialog;

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

        progressDialog = new ProgressDialog(MainActivity.this);
        progressDialog.setTitle("Nội dung của tôi");
        progressDialog.setMessage("Đang tải nội dung, vui lòng đợi!");
        progressDialog.show();
    }
}

Bước 4: Cấu hình AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. Hộp thoại loading sẽ hiện ra ngay khi activity khởi tạo.

ProgressDialog trong Android (Dialog hiển thị tiến trình)

Thay thế hiện đại (Khuyến nghị)

1. ProgressBar trong XML Layout

<!-- Layout có ProgressBar ẩn/hiện -->
<ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyleLarge"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:visibility="gone" />
// Trong code Java/Kotlin
ProgressBar progressBar = findViewById(R.id.progressBar);

// Hiện
progressBar.setVisibility(View.VISIBLE);

// Ẩn sau khi xong
progressBar.setVisibility(View.GONE);

2. Material ProgressIndicator (Material Components)

Thêm dependency: implementation 'com.google.android.material:material:1.9.0'

<com.google.android.material.progressindicator.CircularProgressIndicator
    android:id="@+id/circularProgress"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:indeterminate="true"
    android:visibility="gone" />

3. Sử dụng coroutines (Kotlin) cho tác vụ nền

// Kotlin với Coroutines
lifecycleScope.launch {
    progressBar.visibility = View.VISIBLE
    try {
        val result = repository.loadData() // suspend function
        // Cập nhật UI
    } catch (e: Exception) {
        // Xử lý lỗi
    } finally {
        progressBar.visibility = View.GONE
    }
}

Tóm tắt

  • ProgressDialog: Đã deprecated, không dùng cho dự án mới
  • ProgressBar: Tiêu chuẩn, nhẹ, tùy chỉnh dễ dàng
  • Material ProgressIndicator: Giao diện hiện đại, hỗ trợ indeterminate/determinate
  • Luôn chạy tác vụ nặng (network, DB, tính toán) trên background thread