Android中ProgressDialog的简单使用.
关于Android中ProgressDialog的简单使用可以看这里
Android中ProgressDialog的应用
Android之ProgressDialog的使用
关于Android ProgressBar & ProgressDialog 的详解可以看这里的讲解
【详解】Android ProgressBar ProgressDialog 进度条 进度条对话框
关于ProgressBar与ProgressDialog的区别可以看这里的解释
ProgressBar与ProgressDialog的区别
ProgressDialog 和 ProgressBar 个人使用
android中ProgressDialog与ProgressBar的使用详解
ProgressDialog类似于ProgressBar类,用于显示一个过程,通常用于耗时操作。
ProgressDialog有这样几个方法介绍:
1.setMax()设置对话框中进度条的最大值。
2.setTile()设置标题。
3.setProgressStyle()设置对话框中进度条的样式。例如:环形和水平。
参数:
ProgressDialog.STYLE_SPINNER 环形精度条
ProgressDialog.STYLE_HORIZONTAL 水平样式的进度条
4.setMessage()设置显示的内容。
一个简单的ProgressDialog的使用
首先是布局文件,
activity.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical" > <Button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="wrap_content" />LinearLayout>
MainActivity中代码
public void onClick(View v) { final ProgressDialog proDialog = android.app.ProgressDialog.show(MainActivity.this, "测试", "3秒后自动消失!"); Thread thread = new Thread() { public void run() { try { sleep(3000); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } proDialog.dismiss();//万万不可少这句,否则会程序会卡死。 } }; thread.start(); } };
圆形进度条的实现.
public void onClick(View view) { final ProgressDialog dialog = new ProgressDialog(MainActivity.this); dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);// 设置进度条的形式为圆形转动的进度条 dialog.setCancelable(true);// 设置是否可以通过点击Back键取消 dialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条 // 设置提示的title的图标,默认是没有的,如果没有设置title的话只设置Icon是不会显示图标的 dialog.setTitle("提示"); // dismiss监听 dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { // TODO Auto-generated method stub } }); // 监听Key事件被传递给dialog dialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { // TODO Auto-generated method stub return false; } }); // 监听cancel事件 dialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { // TODO Auto-generated method stub } }); //设置可点击的按钮,最多有三个(默认情况下) dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "中立", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); dialog.setMessage("这是一个圆形进度条"); dialog.show(); Thread thread = new Thread() { public void run() { try { sleep(2000); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } // cancel和dismiss方法本质都是一样的,都是从屏幕中删除Dialog,唯一的区别是 // 调用cancel方法会回调DialogInterface.OnCancelListener如果注册的话,dismiss方法不会回掉 dialog.cancel();// dialog.dismiss(); } }; thread.start(); }
水平进度条.
final ProgressDialog dialog = new ProgressDialog(MainActivity.this); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 设置水平进度条 dialog.setCancelable(true);// 设置是否可以通过点击Back键取消 dialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条 dialog.setIcon(R.mipmap.ic_launcher);// 设置提示的title的图标,默认是没有的 dialog.setTitle("提示"); dialog.setMax(100); dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "保持", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); dialog.setMessage("这是一个水平进度条"); dialog.show(); new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub int i = 0; while (i < 100) { try { Thread.sleep(200); // 更新进度条的进度,可以在子线程中更新进度条进度 dialog.incrementProgressBy(1); // dialog.incrementSecondaryProgressBy(10)//二级进度条更新方式 i++; } catch (Exception e) { // TODO: handle exception } } // 在进度条走完时删除Dialog dialog.dismiss(); } }).start();
i效果如图
关于Unable to add window – token null is not for an application 的错误
最近在写到ProgressDialog的时候 报错:
android.view.WindowManager$BadTokenException: Unable to add window – token null is not for an application。
ProgressDialog progressDialog=new ProgressDialog(context);
此处的context 要保证你的上下文要为activity对象,只有activity才能添加ProgressDialog窗体,
为了确保正确,context可以使用activity.this表示,不要一味地写成getApplicationContext()
更多相关文章
- android 取消标题,程序意外停止
- Android沉浸式状态栏、导航栏
- 打开SDK Manager检查Android(安卓)SDK下载和更新失败的解决方法
- android 圆角按钮和按钮颜色
- Android取消EditText自动获取焦点默认行为
- Android(安卓)TextView 设置中划线 下划线
- Android动画效果
- Android(安卓)高级UI组件
- Android(安卓)Spinner自动弹出列表,设置title