欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android ProgressDialog使用总结

程序员文章站 2023-12-21 19:13:28
progressdialog 继承自alertdialog,alertdialog继承自dialog,实现dialoginterface接口。 progressdialo...

progressdialog 继承自alertdialog,alertdialog继承自dialog,实现dialoginterface接口。

progressdialog的创建方式有两种,一种是new dialog ,一种是调用dialog的静态方法dialog.show()。

// 方式一:new dialog 
final progressdialog dialog = new progressdialog(this); 
dialog.show(); 
// 方式二:使用静态方式创建并显示,这种进度条只能是圆形条,设置title和message提示内容 
progressdialog dialog2 = progressdialog.show(this, "提示", "正在登陆中"); 
// 方式三 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数boolean indeterminate设置是否是不明确的状态 
progressdialog dialog3 = progressdialog 
.show(this, "提示", "正在登陆中", false); 
// 方式四 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数boolean cancelable 设置是否进度条是可以取消的 
progressdialog dialog4 = progressdialog.show(this, "提示", "正在登陆中", 
false, true); 
// 方式五 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数 dialoginterface.oncancellistener 
// cancellistener用于监听进度条被取消 
progressdialog dialog5 = progressdialog.show(this, "提示", "正在登陆中", true, 
true, cancellistener); 

方式五中需要一个cancellistener,代码如下;

private oncancellistener cancellistener = new oncancellistener() { 
@override 
public void oncancel(dialoginterface dialog) { 
// todo auto-generated method stub 
toast.maketext(mainactivity.this, "进度条被取消", toast.length_long) 
.show(); 
} 
}; 

progressdialog的样式有两种,一种是圆形不明确状态,一种是水平进度条状态

第一种方式:圆形进度条

final progressdialog dialog = new progressdialog(this); 
dialog.setprogressstyle(progressdialog.style_spinner);// 设置进度条的形式为圆形转动的进度条 
dialog.setcancelable(true);// 设置是否可以通过点击back键取消 
dialog.setcanceledontouchoutside(false);// 设置在点击dialog外是否取消dialog进度条 
dialog.seticon(r.drawable.ic_launcher);// 
// 设置提示的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(); 
new thread(new runnable() { 
@override 
public void run() { 
// todo auto-generated method stub 
try { 
thread.sleep(5000); 
// cancel和dismiss方法本质都是一样的,都是从屏幕中删除dialog,唯一的区别是 
// 调用cancel方法会回调dialoginterface.oncancellistener如果注册的话,dismiss方法不会回掉 
dialog.cancel(); 
// dialog.dismiss(); 
} catch (interruptedexception e) { 
// todo auto-generated catch block 
e.printstacktrace(); 
} 
} 
}).start(); 

其中通过thread.sleep(5000)模拟后台操作。

cancel和dismiss方法本质都是一样的,都是从屏幕中删除dialog,唯一的区别是:调用cancel方法会回调dialoginterface.oncancellistener如果注册的话,dismiss方法不会回掉。

第二种方式:水平进度条

// 进度条还有二级进度条的那种形式,这里就不演示了 
final progressdialog dialog = new progressdialog(this); 
dialog.setprogressstyle(progressdialog.style_horizontal);// 设置水平进度条 
dialog.setcancelable(true);// 设置是否可以通过点击back键取消 
dialog.setcanceledontouchoutside(false);// 设置在点击dialog外是否取消dialog进度条 
dialog.seticon(r.drawable.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(); 

关于android progressdialog使用总结的相关知识就给大家介绍到这里,后续还会持续更新,请持续关注网站,谢谢!

上一篇:

下一篇: