ProgressDialog是用在耗时操作上的一种组件。
基本原理是新建一个线程去执行耗时操作,原线程执行 ProgressDialog对话框的绘制。
两种方式实现ProgressDialog
第一种方式是直接使用ProgressDialog pd = ProgressDialog.show(MainActivity.this, "Loading...", "Please wait...", true, false);函数,将标题和信息一次性给出,适用于简单对话框。
第二种是
ProgressDialog pd = new ProgressDialog(MainActivity.this);
pd.setTitle("loading");
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setMessage("please wait,please~~");
pd.show();
除此之外ProgressDialog 还有很多方法设置对话框。
setProgressStyle的参数
1)ProgressDialog.STYLE_HORIZONTAL
int STYLE_HORIZONTAL Creates a ProgressDialog with a horizontal progress bar.
2)ProgressDialog.STYLE_SPINNER
int STYLE_SPINNER Creates a ProgressDialog with a circular, spinning progress bar.
最终结果:
三张图片依次为,初始状态,按下第一个按钮,按下第二个按钮。
xml文件
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <Button android:id="@+id/btn"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="press to begin"/>
- <Button android:id="@+id/btn2"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="press to begin,style"/>
- <TextView android:id="@+id/txt"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="begin"
- />
- </LinearLayout>
- package com.xujin.progressbar;
- import android.app.Activity;
- import android.app.ProgressDialog;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.view.View;
- import android.widget.Button;
- import android.widget.TextView;
- public class MainActivity extends Activity {
- private TextView txt;
- private Button Btn;
- private Button Btn2;
- private ProgressDialog pd;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- txt = (TextView)findViewById(R.id.txt);
- Btn = (Button)findViewById(R.id.btn);
- Btn2 = (Button)findViewById(R.id.btn2);
- Btn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- pd = ProgressDialog.show(MainActivity.this, "Loading...", "Please wait...", true, false);
- new Thread(){
- @Override
- public void run() {
- //需要花时间的函数
- try {
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- //向handler发消息
- handler.sendEmptyMessage(0);
- }}.start();
- }
- });
- Btn2.setOnClickListener(new View.OnClickListener() {
- @SuppressWarnings("deprecation")
- @Override
- public void onClick(View v) {
- pd = new ProgressDialog(MainActivity.this);
- pd.setTitle("loading");
- pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
- pd.setMessage("please wait,please~~");
- pd.show();
- new Thread(){
- @Override
- public void run() {
- //需要花时间的函数
- try {
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- //向handler发消息
- handler.sendEmptyMessage(0);
- }}.start();
- }
- });
- }
- private Handler handler = new Handler(){
- @Override
- public void handleMessage(Message msg) {
- pd.dismiss();
- txt.setText("End");
- }};
- }