ProgressDialog进度条对话框

来源:互联网 发布:极乐净土镜头数据 编辑:程序博客网 时间:2024/05/29 15:08

可以通过相应的方法设置对话框上显示的文字、图标、进度条的样式,也可以使用线程来控制进度条的显示。
先搞明白cancle()和dismiss()的区别:
cancle():取消进度条对话框;
dismiss():释放对话框,从当前窗体移除。
抱着试试看的态度翻了一下源码:

    public void cancel() {             if (mCancelMessage != null) {                 // Obtain a new message so this dialog can be re-used                 Message.obtain(mCancelMessage).sendToTarget();             }             dismiss();         }  

在cancel方法中调用了dismiss方法。
下面是Demo:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <TextView        android:id="@+id/tv_content"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="20dp"        android:text="进度条对话框"        android:textSize="30sp" />    <Button        android:id="@+id/btn_circle"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="20dp"        android:onClick="onClick"        android:textSize="30sp"        android:text="圆形进度条对话框" />    <Button        android:id="@+id/btn_long"        android:textSize="30sp"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="20dp"        android:onClick="onClick"        android:text="长形进度对话框" /></LinearLayout>
public class ProgressDialogDemo extends Activity {    private static final int DOWNLOAD_DONE = 1;    private TextView mTextView;    private ProgressDialog mProgressDialog;    private int progress;    private Handler handler = new Handler() {        public void handleMessage(Message msg) {            switch (msg.what) {            case DOWNLOAD_DONE:                mTextView.setText("嘿嘿,下载完成");                break;            default:                break;            }        };    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.progress_dialog);        mTextView = (TextView) findViewById(R.id.tv_content);    }    public void onClick(View v) {        switch (v.getId()) {        case R.id.btn_circle:            mProgressDialog = new ProgressDialog(this);            // 设置进度条为圆形            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);            // 是否可以通过点击Back键取消            mProgressDialog.setCancelable(true);            // 设置在点击ProgressDialog外是否取消ProgressDialog进度条            mProgressDialog.setCanceledOnTouchOutside(false);            mProgressDialog.setIcon(R.drawable.ic_launcher);//            // 如果没有设置title,只设置Icon是不会显示图标的            mProgressDialog.setTitle("提示");            mProgressDialog.setButton(ProgressDialog.BUTTON_NEGATIVE, "取消", new OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    mProgressDialog.cancel();                    mTextView.setText("哈哈,您取消了圆形进度条对话框");                }            });            mProgressDialog.show();            mTextView.setText("哈哈,您点击了圆形进度条按钮");            break;        case R.id.btn_long:            progress = 0;            mProgressDialog = new ProgressDialog(ProgressDialogDemo.this);            // 设置长形风格进度条            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);            mProgressDialog.setIcon(R.drawable.ic_launcher);            mProgressDialog.setMessage("长形进度对话框");            // 设置进度条为不明确才可以在进度条上显示具体进度            mProgressDialog.setIndeterminate(false);            // 设置当前进度值            mProgressDialog.setProgress(0);            // 第二进度值            mProgressDialog.setSecondaryProgress(0);            // 最大值            mProgressDialog.setMax(100);            // 是否按返回键取消            mProgressDialog.setCancelable(true);            // 添加取消按钮 Whichbutton to set the message for, can be one of            // BUTTON_POSITIVE, BUTTON_NEGATIVE, or BUTTON_NEUTRAL            mProgressDialog.setButton(ProgressDialog.BUTTON_NEGATIVE, "取消", new OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    mProgressDialog.cancel();                    mTextView.setText("哈哈,您取消了长形进度条对话框");                }            });            mProgressDialog.show();            mTextView.setText("哈哈,您点击了长形进度条按钮");            // 创建线程更新进度            new Thread() {                public void run() {                    while (progress <= mProgressDialog.getMax()) {                        mProgressDialog.setProgress(progress += 2);                        try {                            Thread.sleep(100);                        } catch (InterruptedException e) {                            mProgressDialog.cancel();                        }                    }                    // 异步消息处理                    mProgressDialog.cancel();                    Message message = new Message();                    message.what = DOWNLOAD_DONE;                    handler.sendMessage(message);                };            }.start();            break;        default:            break;        }    }}

这里写图片描述
中间出了一个小问题:在长形进度条对话框点击取消后,过一会儿,界面还是会显示“下载完成”。

0 0