ProgressDialog进度条对话框
2016-01-04 11:49
281 查看
可以通过相应的方法设置对话框上显示的文字、图标、进度条的样式,也可以使用线程来控制进度条的显示。
先搞明白cancle()和dismiss()的区别:
cancle():取消进度条对话框;
dismiss():释放对话框,从当前窗体移除。
抱着试试看的态度翻了一下源码:
在cancel方法中调用了dismiss方法。
下面是Demo:
中间出了一个小问题:在长形进度条对话框点击取消后,过一会儿,界面还是会显示“下载完成”。
先搞明白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; } } }
中间出了一个小问题:在长形进度条对话框点击取消后,过一会儿,界面还是会显示“下载完成”。
相关文章推荐
- meteor Package version not in catalog: npm-container
- [转]OpenResty的现状、趋势、使用及学习方法
- 非阻塞通道
- javascript 检测request请求IP是否为内网IP
- 让进程在后台可靠运行的几种方法
- AngularJS 控制器
- Backbone.js中events中事件不生效
- 跨应用读取SharedPreference数据
- springmvc集成jsp和freemark两个模板引擎
- [No00007C]dreamweaver cc 注释快捷键
- zabbix 监控
- lua tutorial 02
- Linux/Unix 桌面趣事:桌面上追逐的猫和老鼠
- 真正的团队,必须要拍死这6大负能量
- 绝美中国
- php中curl的介绍
- C#判断字符是英文还是中文
- 大数据系列第二课:scala基础
- 有参转录组常用数据库
- Node: 在Mac中离线安装Sqlite3