您的位置:首页 > 其它

ProgressDialog进度条对话框

2016-01-04 11:49 281 查看
可以通过相应的方法设置对话框上显示的文字、图标、进度条的样式,也可以使用线程来控制进度条的显示。

先搞明白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;
}
}

}




中间出了一个小问题:在长形进度条对话框点击取消后,过一会儿,界面还是会显示“下载完成”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: