ProgressDialog进度条对话框

可以通过相应的方法设置对话框上显示的文字、图标、进度条的样式,也可以使用线程来控制进度条的显示。
先搞明白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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值