Có hai loại ProgressBar trong Android: Horizontal và Circular. Hôm nay, chúng ta sẽ triển khai cả hai loại này.
ProgressBar trong Android
ProgressBar là một thành phần đồ họa dùng để hiển thị mức độ hoàn thành của một tác vụ nào đó dưới dạng một thanh tiến trình. Nó cho người dùng biết được khoảng thời gian cần thiết để hoàn thành công việc. Sử dụng ProgressBar là một cách làm hay để cải thiện trải nghiệm người dùng, vì nó hiển thị trạng thái của một tác vụ đang chạy (ví dụ như tải một hình ảnh).
Các thuộc tính của ProgressBar
Dưới đây là một số thuộc tính quan trọng dùng để định nghĩa một ProgressBar.
android:max: Ta có thể dùng thuộc tính này để đặt giá trị tối đa cho ProgressBar. Mặc định, giá trị tối đa của progress bar là 100.
android:indeterminate: Thuộc tính này nhận một giá trị boolean tùy thuộc vào tính determinate (có thể biết trước được điểm kết thúc hoặc tổng thời lượng) của tiến trình. Nếu đặt là false, ProgressBar sẽ hiển thị tiến độ thực tế. Ngược lại, nếu là true, Android sẽ hiển thị một hiệu ứng động lặp lại theo chu kỳ để cho biết tác vụ đang diễn ra.
android:minHeight: Dùng để đặt chiều cao cho ProgressBar.
android:minWidth: Dùng để đặt chiều rộng cho ProgressBar.
android:progress: Dùng để thiết lập giá trị mà ProgressBar sẽ tăng lên sau mỗi lần cập nhật.
style: Mặc định, ProgressBar sẽ hiển thị dưới dạng một vòng xoay. Nếu muốn hiển thị dưới dạng thanh ngang, ta cần đặt thuộc tính style như sau: style="?android:attr/progressBarStyleHorizontal".
Trong bài hướng dẫn này, chúng ta sẽ tạo một ProgressBar và tăng giá trị của nó thông qua việc cập nhật bên trong một thread. Ta sẽ cho thread tạm dừng (sleep) 200 mili giây sau mỗi lần tăng giá trị để bạn có thể thấy rõ tiến trình.
Cấu trúc của ví dụ mẫu
Dự án này bao gồm một Activity và layout duy nhất chứa cả hai loại ProgressBar.
Code ví dụ
File activity_main.xml có một RelativeLayout làm view cha, bên trong chứa một ProgressBar dạng ngang và một ProgressBar dạng tròn, cùng với một TextView để hiển thị tiến độ dưới dạng số.
Trong layout trên, giá trị của progress bar ngang sẽ tăng thêm 1 sau mỗi lần cập nhật, như đã thiết lập trong android:progress. Progress bar tròn sẽ chạy liên tục cho đến khi activity dừng lại.
package com.journaldev.progressbar;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private ProgressBar progressBar;
private int progressStatus = 0;
private TextView textView;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
textView = (TextView) findViewById(R.id.textView);
// Start long running operation in a background thread
new Thread(new Runnable() {
public void run() {
while (progressStatus < 100) {
progressStatus += 1;
// Update the progress bar and display the
//current value in the text view
handler.post(new Runnable() {
public void run() {
progressBar.setProgress(progressStatus);
textView.setText(progressStatus+"/"+progressBar.getMax());
}
});
try {
// Sleep for 200 milliseconds.
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
Trong đoạn code trên, progressBar sẽ cập nhật sau mỗi 200 mili giây và các cập nhật này được thiết lập bằng setProgress(). Ta sử dụng một Handler (class của Android để quản lý các Message hoặc Runnable trong một thread) để chạy thread nền. Thread này sẽ chạy cho đến khi giá trị progressStatus đạt 100. Hình ảnh dưới đây minh họa kết quả của ứng dụng khi chạy.
Tổng kết
Như vậy, trong bài hướng dẫn này, chúng ta đã tạo một ProgressBar trong Android. Bạn có thể tải về toàn bộ ví dụ mẫu tại link này. Trong một bài hướng dẫn sau, chúng ta sẽ tìm hiểu cách thêm ProgressBar vào ProgressDialog trong trường hợp bạn cần làm nổi bật thông tin tiến độ tác vụ hơn nữa.
Về tác giả
Chris PhamTechnical Writer
I have over 5 years of experience writing technical documentation for tech products, making them accessible and user-friendly. My focus is always on providing clear and precise information.
@#@
Tôi đã có hơn 5 năm kinh nghiệm viết tài liệu kỹ thuật cho các sản phẩm công nghệ, giúp người dùng dễ dàng tiếp cận và sử dụng. Tôi luôn tập trung vào việc cung cấp thông tin chính xác và dễ hiểu.
Cập nhật thông tin mới nhấtNhận các thông tin mới nhất về mối đe dọa, báo cáo an ninh mạng từ CyStack về hòm thư điện tử của bạn
Thảo luận (0)
Đăng nhập để thảo luận
Bài viết liên quan
{"success":true,"head":"<title>Cách tạo ProgressBar trong Android - CyStack Tutorial</title>\n<meta name=\"description\" content=\"Tham khảo bài viết này để biết cách sử dụng ProgressBar trong Android nhằm cung cấp phản hồi trực quan cho người dùng về tiến độ tác vụ, giúp họ biết ứng dụng đang xử lý và giảm cảm giác chờ đợi.\"/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-video-preview:-1, max-image-preview:large\"/>\n<link rel=\"canonical\" href=\"https://blog.cystack.org/tutorial/2025/09/23/tao-progressbar-trong-android/\" />\n<meta property=\"og:locale\" content=\"en_US\" />\n<meta property=\"og:type\" content=\"article\" />\n<meta property=\"og:title\" content=\"Cách tạo ProgressBar trong Android - CyStack Tutorial\" />\n<meta property=\"og:description\" content=\"Tham khảo bài viết này để biết cách sử dụng ProgressBar trong Android nhằm cung cấp phản hồi trực quan cho người dùng về tiến độ tác vụ, giúp họ biết ứng dụng đang xử lý và giảm cảm giác chờ đợi.\" />\n<meta property=\"og:url\" content=\"https://blog.cystack.org/tutorial/2025/09/23/tao-progressbar-trong-android/\" />\n<meta property=\"og:site_name\" content=\"CyStack Tutorial\" />\n<meta property=\"article:tag\" content=\"vi\" />\n<meta property=\"article:section\" content=\"Android\" />\n<meta property=\"og:image\" content=\"https://s2.cystack.net/tutorial/23110608/tao-progressbar-trong-android.jpg\" />\n<meta property=\"og:image:secure_url\" content=\"https://s2.cystack.net/tutorial/23110608/tao-progressbar-trong-android.jpg\" />\n<meta property=\"og:image:width\" content=\"1200\" />\n<meta property=\"og:image:height\" content=\"630\" />\n<meta property=\"og:image:alt\" content=\"ProgressBar trong Android\" />\n<meta property=\"og:image:type\" content=\"image/jpeg\" />\n<meta property=\"article:published_time\" content=\"2025-09-23T11:06:50+07:00\" />\n<meta name=\"twitter:card\" content=\"summary_large_image\" />\n<meta name=\"twitter:title\" content=\"Cách tạo ProgressBar trong Android - CyStack Tutorial\" />\n<meta name=\"twitter:description\" content=\"Tham khảo bài viết này để biết cách sử dụng ProgressBar trong Android nhằm cung cấp phản hồi trực quan cho người dùng về tiến độ tác vụ, giúp họ biết ứng dụng đang xử lý và giảm cảm giác chờ đợi.\" />\n<meta name=\"twitter:image\" content=\"https://s2.cystack.net/tutorial/23110608/tao-progressbar-trong-android.jpg\" />\n<meta name=\"twitter:label1\" content=\"Written by\" />\n<meta name=\"twitter:data1\" content=\"Chris Pham\" />\n<meta name=\"twitter:label2\" content=\"Time to read\" />\n<meta name=\"twitter:data2\" content=\"4 minutes\" />\n<script type=\"application/ld+json\" class=\"rank-math-schema\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https://blog.cystack.org/tutorial/#person\",\"name\":\"CyStack Tutorial\"},{\"@type\":\"WebSite\",\"@id\":\"https://blog.cystack.org/tutorial/#website\",\"url\":\"https://blog.cystack.org/tutorial\",\"name\":\"CyStack Tutorial\",\"publisher\":{\"@id\":\"https://blog.cystack.org/tutorial/#person\"},\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https://s2.cystack.net/tutorial/23110608/tao-progressbar-trong-android.jpg\",\"url\":\"https://s2.cystack.net/tutorial/23110608/tao-progressbar-trong-android.jpg\",\"width\":\"1200\",\"height\":\"630\",\"caption\":\"ProgressBar trong Android\",\"inLanguage\":\"en-US\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://blog.cystack.org/tutorial/2025/09/23/tao-progressbar-trong-android/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":\"1\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":\"2\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial/category/android/\",\"name\":\"Android\"}},{\"@type\":\"ListItem\",\"position\":\"3\",\"item\":{\"@id\":\"https://blog.cystack.org/tutorial/2025/09/23/tao-progressbar-trong-android/\",\"name\":\"C\\u00e1ch t\\u1ea1o ProgressBar trong Android\"}}]},{\"@type\":\"WebPage\",\"@id\":\"https://blog.cystack.org/tutorial/2025/09/23/tao-progressbar-trong-android/#webpage\",\"url\":\"https://blog.cystack.org/tutorial/2025/09/23/tao-progressbar-trong-android/\",\"name\":\"C\\u00e1ch t\\u1ea1o ProgressBar trong Android - CyStack Tutorial\",\"datePublished\":\"2025-09-23T11:06:50+07:00\",\"dateModified\":\"2025-09-23T11:06:50+07:00\",\"isPartOf\":{\"@id\":\"https://blog.cystack.org/tutorial/#website\"},\"primaryImageOfPage\":{\"@id\":\"https://s2.cystack.net/tutorial/23110608/tao-progressbar-trong-android.jpg\"},\"inLanguage\":\"en-US\",\"breadcrumb\":{\"@id\":\"https://blog.cystack.org/tutorial/2025/09/23/tao-progressbar-trong-android/#breadcrumb\"}},{\"@type\":\"Person\",\"@id\":\"https://blog.cystack.org/tutorial/author/codeweaver/\",\"name\":\"Chris Pham\",\"url\":\"https://blog.cystack.org/tutorial/author/codeweaver/\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https://secure.gravatar.com/avatar/7a3584c941fa360ac061b2a8f15684ced7b92daa1f09481be135a684d989e9b9?s=96&d=mm&r=g\",\"url\":\"https://secure.gravatar.com/avatar/7a3584c941fa360ac061b2a8f15684ced7b92daa1f09481be135a684d989e9b9?s=96&d=mm&r=g\",\"caption\":\"Chris Pham\",\"inLanguage\":\"en-US\"}},{\"@type\":\"BlogPosting\",\"headline\":\"C\\u00e1ch t\\u1ea1o ProgressBar trong Android - CyStack Tutorial\",\"keywords\":\"ProgressBar trong Android\",\"datePublished\":\"2025-09-23T11:06:50+07:00\",\"dateModified\":\"2025-09-23T11:06:50+07:00\",\"articleSection\":\"Android\",\"author\":{\"@id\":\"https://blog.cystack.org/tutorial/author/codeweaver/\",\"name\":\"Chris Pham\"},\"publisher\":{\"@id\":\"https://blog.cystack.org/tutorial/#person\"},\"description\":\"Tham kh\\u1ea3o b\\u00e0i vi\\u1ebft n\\u00e0y \\u0111\\u1ec3 bi\\u1ebft c\\u00e1ch s\\u1eed d\\u1ee5ng ProgressBar trong Android nh\\u1eb1m cung c\\u1ea5p ph\\u1ea3n h\\u1ed3i tr\\u1ef1c quan cho ng\\u01b0\\u1eddi d\\u00f9ng v\\u1ec1 ti\\u1ebfn \\u0111\\u1ed9 t\\u00e1c v\\u1ee5, gi\\u00fap h\\u1ecd bi\\u1ebft \\u1ee9ng d\\u1ee5ng \\u0111ang x\\u1eed l\\u00fd v\\u00e0 gi\\u1ea3m c\\u1ea3m gi\\u00e1c ch\\u1edd \\u0111\\u1ee3i.\",\"name\":\"C\\u00e1ch t\\u1ea1o ProgressBar trong Android - CyStack Tutorial\",\"@id\":\"https://blog.cystack.org/tutorial/2025/09/23/tao-progressbar-trong-android/#richSnippet\",\"isPartOf\":{\"@id\":\"https://blog.cystack.org/tutorial/2025/09/23/tao-progressbar-trong-android/#webpage\"},\"image\":{\"@id\":\"https://s2.cystack.net/tutorial/23110608/tao-progressbar-trong-android.jpg\"},\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https://blog.cystack.org/tutorial/2025/09/23/tao-progressbar-trong-android/#webpage\"}}]}</script>\n"}