Header ads

Header ads
» » ProgressBar

ProgressBar trong Android

ProgressBar là một thanh tiến trình thể hiện trạng thái của một hoạt động, tác vụ đang diễn ra đến đâu, bao lâu thì kết thúc. ProgressBar thường có dạng thanh bar nằm ngang, và có thể được custom theo nhiều dạng khác nhau, mình sẽ giới thiệu tới các bạn kỹ hơn ở phần sau.

ProgressBar là lớp con của View,  Do đó nó kế thừa tất cả các thuộc tính của View

ProgressBar code:

 

  <ProgressBar  android:id="@+id/simpleProgressBar"  android:layout_width="wrap_content"  android:layout_height="wrap_content" />

Tạo ProgressBar nằm ngang

  <ProgressBar      android:id="@+id/progressBar1"      style="?android:attr/progressBarStyleHorizontal"      android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:layout_alignParentLeft="true"      android:layout_alignParentTop="true"/>

 


Các phương thức quan trong của ProgressBar

1. getMax() - Trả về giá trị lớn nhất của ProgressBar

Chúng ta có thể lấy giá trị lớn nhất của ProgressBar, phương thức này trả về một số nguyên. Ví dụ lấy giá trị lớn nhất của ProgressBar

  ProgressBar simpleProgressBar=(ProgressBar) findViewById(R.id.simpleProgressBar); // initiate the progress bar   int maxValue=simpleProgressBar.getMax(); // get maximum value of the progress bar

2. getProgress() – Trả về giá trị tiến trình hiện tại

Chúng ta có thể lấy giá trị tiến trình của ProgressBar, phương thức này trả về một số nguyên. Ví dụ lấy giá trị tiến trình hiện tại của ProgressBar

  rogressBar simpleProgressBar=(ProgressBar)findViewById(R.id.simpleProgressBar); // initiate the progress bar  int progressValue=simpleProgressBar.getProgress(); // get progress value from the progress bar

 


Thuộc tính thường dùng của ProgressBar

Bây giờ chúng xem một số thuộc tính hay sử dụng trong ProgressBar trong tập tin XML

1. android:id: Là thuộc tính duy nhất của ProgressBar.

  <ProgressBar      android:id="@+id/simpleProgressBar"      style="?android:attr/progressBarStyleHorizontal"      android:layout_width="fill_parent"      android:layout_height="wrap_content" />

Dựa vào Id ta sẽ lấy được control theo đúng Id này, xem code bên dưới để biết cách lấy control theo Id:

  ProgressBar simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar);

2. android:max: Thuộc tính dùng để định nghĩa giá trị tối đa mà tiến trình có thể đạt được. Giá trị là số nguyên: 100, 200. Ví dụ thiết lập cho ProgressBar có gia trị tối đa là 100

  <ProgressBar      android:id="@+id/simpleProgressBar"      style="?android:attr/progressBarStyleHorizontal"      android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:max="100" /><!-- Thiết lập giá trị tối đa cho ProgressBar -->  

Thiết lập thuộc tính android:max trong java class

  ProgressBar simpleProgressBar=(ProgressBar) findViewById(R.id.simpleProgressBar); // initiate the progress bar  simpleProgressBar.setMax(100); // 100 maximum value for the progress bar

3. android:progress: Thuộc tính này dùng để định nghĩa giá trị mặc định cho tiến trình. Giá trị này trong khoảng từ 0 đến max và phải là số nguyên. Ví dụ sau thiết lập max=100 progress=50

  <ProgressBar  android:id="@+id/simpleProgressBar"  style="?android:attr/progressBarStyleHorizontal"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:max="100"   android:progress="50"/><!--// 50 default progress value-->

Thiết lập thuộc tính progress trong java class

  rogressBar simpleProgressBar=(ProgressBar)findViewById(R.id.simpleProgressBar); // initiate the progress bar  simpleProgressBar.setMax(100); // 100 maximum value for the progress value  simpleProgressBar.setProgress(50); // 50 default progress value for the progress bar

4. android:progressDrawable: Thuộc tính này thường được sử dụng để tùy chính lại ProgressBar. Trong ví dụ sau chúng ta sẽ tùy chỉnh lại một ProgressBar:

Bước 1: Thêm code vào main_activity.xml hoặc main.xml

  <ProgressBar   android:id="@+id/simpleProgressBar"   style="?android:attr/progressBarStyleHorizontal"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:max="100"    android:progress="50"   android:progressDrawable="@drawable/custom_progress"/><!--custom progress drawable for progress mode-->

Bước 2 : Tạo tập tin custom_progress.xml trong thư mục drawable:

  <?xml version="1.0" encoding="utf-8"?>  <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >        <item>          <shape>              <gradient                  android:endColor="#fff"                  android:startColor="#1f1"                  android:useLevel="true" />            </shape>      </item>  </layer-list>

5. android:background: Thuộc tính này xác định màu nền cho ProgressBar

  <ProgressBar   android:id="@+id/simpleProgressBar"   style="?android:attr/progressBarStyleHorizontal"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:max="100"    android:progress="50"   android:background="#f00"/><!--Thiết lập màu nền -->

6. android:padding: Thuộc tính này xác định khoảng cách từ đường viền của ProgressBar với nội dung nó chứa: left, right, top or bottom. Cũng ví dụ trên bây giờ chúng ta xác định padding=30dp từ mọi phía của ProgressBar.

  <ProgressBar   android:id="@+id/simpleProgressBar"   style="?android:attr/progressBarStyleHorizontal"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:max="100"    android:progress="50"   android:background="#f00"   android:padding="30sp"/><!--Thiết lập padding -->

7. android:indeterminate: Nếu bạn biết giá trị công việc của bạn phải làm thì bạn chỉ cần sử dụng ProgressBar để thể hiện giá trị hiện tại. Còn nếu không biết giá trị chính xác thì bạn có thể sử dụng android:indeterminate=”true” trong XML hoặc progressBar.setIndeterminate(true) trong code. Lúc này ProgressBar sẽ ở chế độ Indeterminate và nó sẽ không hiển thị quá trình làm việc.

  <ProgressBar   android:id="@+id/simpleProgressBar"   style="?android:attr/progressBarStyleHorizontal"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:max="100"    android:progress="50"   android:background="#f00"   android:indeterminate="true"/><!--true value for indeterminate-->

Thiết lập thuộc tính indeterminate trong java class

  ProgressBar simpleProgressBar=(ProgressBar)findViewById(R.id.simpleProgressBar);   simpleProgressBar.setIndeterminate(true);

Như bạn thấy ở đây mình có 2 thuộc tính cần lưu ý là style và android:indeterminate. Như vậy ProgressBar của mình sẽ là thanh nằm ngang và hiển thị quá trình làm việc như hình sau:

Còn nếu bạn thiết lập android:indeterminate=”true” thì ProgressBar sẽ không hiển thị quá trình làm việc, hình như sau:

Còn nếu bạn bỏ thuộc tính style thì sẽ ra hình sau:


Ví dụ: Trong ví dụ này chúng ta sẽ làm ứng dụng gồm có 1 ProgressBar và 1 Button. Mặc định dấu thanh ProgressBar, khi người dùng click vào Button sẽ xuất hiện thanh ProgressBar. Tiến hành tạo project, vào thư mục  res /layout -> activity_main.xml thiết kế giao diện sau:

Bước 1: Tạo một project tên là ProgressBarFile->New->Android Application Project điền các thông tin ->Next ->Finish

Bước 2: Mở res -> layout -> xml (hoặc) activity_main.xml và thêm code, chúng ta sẽ tạo các đối tượng ProgressBar và Button trong  Relative Layout.

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:tools="http://schemas.android.com/tools"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:paddingBottom="@dimen/activity_vertical_margin"      android:paddingLeft="@dimen/activity_horizontal_margin"      android:paddingRight="@dimen/activity_horizontal_margin"      android:paddingTop="@dimen/activity_vertical_margin"      tools:context="hiepsiit.com.progressbar.MainActivity" >    <ProgressBar          android:id="@+id/simpleProgressBar"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:visibility="invisible"          android:layout_centerHorizontal="true"/>        <Button          android:id="@+id/btnStart"          android:layout_width="200dp"          android:layout_height="wrap_content"          android:text="Start"          android:textSize="20sp"          android:textStyle="bold"          android:layout_centerHorizontal="true"          android:layout_marginTop="100dp"          android:padding="10dp"          android:background="#0f0"          android:textColor="#fff"/>  </RelativeLayout>  

Bước 3: Mở app -> src ->MainActivity.java và thêm code.

  package hiepsiit.com.progressbar;      import android.app.Activity;  import android.os.Bundle;  import android.view.Menu;  import android.view.MenuItem;  import android.view.View;  import android.widget.Button;  import android.widget.ProgressBar;    public class MainActivity extends Activity {  	ProgressBar simpleProgressBar;  	@Override  	protected void onCreate(Bundle savedInstanceState) {  		super.onCreate(savedInstanceState);  		setContentView(R.layout.activity_main);  		simpleProgressBar	=(ProgressBar)findViewById(R.id.simpleProgressBar);   		Button btnStart = (Button) findViewById(R.id.btnStart);          // perform click event on button  		btnStart.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View v) {                  // visible the progress bar                  simpleProgressBar.setVisibility(View.VISIBLE);              }          });  	}    	}

 


Download ví dụ

Ứng dụng này được phát triển bởi adt bundleandroid 4.2 sử dụng minimum sdk 11  and target sdk 21.


Kết quả khi chạy ứng dụng:

Sau đó click vào button "Start"


Ví dụ sử dụng thanh ngang ProgressBar

Ví dụ: Trong ví dụ này chúng ta sẽ làm ứng dụng 1 Button. Khi người dùng click vào Button sẽ xuất hiện hộp thoại download bằng cách sử dụng ProgressBarDialog. Tiến hành tạo project, vào thư mục  res /layout -> activity_main.xml thiết kế giao diện sau:

Cách tính tiến trình download tập tin:

Với ProgressBar các bạn sẽ tiện theo dõi xem quá trình xử lý dữ liệu đã hoàn thành được bao nhiêu phần trăm hay còn bao lâu nữa quá trình xử lý sẽ xong.

Để làm việc với ProgressBar thuật tiện và dễ dàng thì các thử xem qua ví dụ sau nhé:

Giả sử ta có một công việc X với thời gian xử lý của nó là 30s, trong quá trình công việc xử lý ta cần phải tính được xem công việc đã hoàn tất bao nhiêu phần trăm, sau mỗi lần tính ta sẽ lấy giá trị và hiện giá trị đó lên ProgressBar. Để tính giá trị này ta tính theo công thức:

% hoàn thành = (số công việc đã hoàn thành) * 100 / tổng số công việc

Bước 1: Tạo một project tên là ProgressBarDemoFile->New->Android Application Project điền các thông tin ->Next ->Finish

Bước 2: Mở res -> layout -> xml (hoặc) activity_main.xml và thêm code, chúng ta sẽ tạo các đối tượng  Button trong  Relative Layout.

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:tools="http://schemas.android.com/tools"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:paddingBottom="@dimen/activity_vertical_margin"      android:paddingLeft="@dimen/activity_horizontal_margin"      android:paddingRight="@dimen/activity_horizontal_margin"      android:paddingTop="@dimen/activity_vertical_margin"      tools:context="hiepsiit.com.progressbardemo.MainActivity" >       <Button          android:id="@+id/btnStart"          android:layout_width="200dp"          android:layout_height="wrap_content"          android:text="Start"          android:textSize="20sp"          android:textStyle="bold"          android:layout_centerHorizontal="true"          android:layout_marginTop="100dp"          android:padding="10dp"          android:background="#0f0"          android:textColor="#fff"/>  </RelativeLayout>  

Bước 3: Mở app -> src ->MainActivity.java và thêm code.

  package hiepsiit.com.progressbardemo;    import android.app.Activity;  import android.app.ProgressDialog;  import android.os.Bundle;  import android.view.Menu;  import android.view.MenuItem;  import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;    public class MainActivity extends Activity {  	 private Button btnStart;  	 ProgressDialog progressBar;  	@Override  	protected void onCreate(Bundle savedInstanceState) {  		super.onCreate(savedInstanceState);  		setContentView(R.layout.activity_main);  		btnStart	=	(Button) findViewById(R.id.btnStart);  		btnStart.setOnClickListener(new OnClickListener() {  			  			@Override  			public void onClick(View v) {  				// TODO Auto-generated method stub  				// Khởi tạo progressBar với đối là Context                  progressBar = new ProgressDialog(MainActivity.this);                  // Cho phép hủy progressBar nếu ấn nút Back                  progressBar.setCancelable(true);                  // Đặt tiêu đề cho ProgressBar                  progressBar.setMessage("Đang xử lý, vui lòng đợi...");                  // Đặt giao diện cho ProgressBar                  progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);                  // Đặt giá trị đầu tiên, đây là giá trị thể hiện mức độ hoàn thành công                   // việc có thang từ 0 - > 100                  // do hiện tại công việc chưa hoàn thành được chút nào nên ta đặt là 0                  progressBar.setProgress(0);                  // Đặt cho giá trị lớn nhất thể hiện mức độ hoàn thành công việc là 100                  progressBar.setMax(100);                  // Hiện ProgressBar                  progressBar.show();                                     // Tạo một luồng xử lý công việc.                  new MyThread().start();                         }  		});  	}  	class MyThread extends Thread{                    @Override          public void run(){              // xử lý công việc cần hoàn thành              for(int i =0; i< 30; i++){                  // Tạm dừng 1s, thực tế thì chỗ này là xử lý công việc                  try {                      Thread.sleep(1000);                  } catch (InterruptedException e) {                      // TODO Auto-generated catch block                      e.printStackTrace();                  }                                     // tính xem công việc đã hoàn thành bao nhiêu phần trăm và đưa lên progressbar                  progressBar.setProgress((i * 100) / 30);              }              // đóng brogressbar.              progressBar.dismiss();          }      }           	  }  

Code dưới đây là khởi tạo ProgressDialog

  // Khởi tạo progressBar với đối là Context  progressBar = new ProgressDialog(MainActivity.this);  // Cho phép hủy progressBar nếu ấn nút Back  progressBar.setCancelable(true);  // Đặt tiêu đề cho ProgressBar  progressBar.setMessage("Đang xử lý, vui lòng đợi...");  // Đặt giao diện cho ProgressBar  progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  // Đặt giá trị đầu tiên, đây là giá trị thể hiện mức độ hoàn thành công   // việc có thang từ 0 - > 100  // do hiện tại công việc chưa hoàn thành được chút nào nên ta đặt là 0  progressBar.setProgress(0);  // Đặt cho giá trị lớn nhất thể hiện mức độ hoàn thành công việc là 100  progressBar.setMax(100);  // Hiện ProgressBar  progressBar.show();                   

Code tính tiến trình theo công thức: % hoàn thành = (số công việc đã hoàn thành) * 100 / tổng số công việc

  public void run(){              // xử lý công việc cần hoàn thành              for(int i =0; i< 30; i++){                  // Tạm dừng 1s, thực tế thì chỗ này là xử lý công việc                  try {                      Thread.sleep(1000);                  } catch (InterruptedException e) {                      // TODO Auto-generated catch block                      e.printStackTrace();                  }                                     // tính xem công việc đã hoàn thành bao nhiêu phần trăm và đưa lên progressbar                  progressBar.setProgress((i * 100) / 30);              }              // đóng brogressbar.              progressBar.dismiss();          }

 


Download ví dụ

Ứng dụng này được phát triển bởi adt bundleandroid 4.2 sử dụng minimum sdk 11  and target sdk 21.


Kết quả khi chạy ứng dụng:

Sau đó click vào button "Start"


 



Cập nhật công nghệ từ Youtube tại link: https://www.youtube.com/channel/UCOxeYcvZPGf-mGLYSl_1LuA/videos
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com

About Học viện đào tạo trực tuyến

Xinh chào bạn. Tôi là Đinh Anh Tuấn - Thạc sĩ CNTT. Email: dinhanhtuan68@gmail.com .
- Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
- Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
«
Next
Bài đăng Mới hơn
»
Previous
Bài đăng Cũ hơn