先说一下之前用的Dialog,通过showDialog(int Id )这个方法,唤醒onCreateDialog这个方法,然后在这个方法里面对Dialog进行一些设置,最后返回这个Dialog对象就行了。注意,这里不需要你去show(),直接会帮你show。但是这个在后面的基本上不用了。
下面说一个子类AlertDialog的使用吧。
1 简单的使用。注释都写在代码里面吧
AlertDialog.Builder builder = new AlertDialog.Builder(this);//构建builder对象,一些设置都是通过它,最后在构建dialog对象
// title只能是字符串 或者是string的引用,否则Resources$NotFoundException
builder.setTitle(0 + ""); //设置对话框标题
builder.setMessage(0 + "");//设置对话框 信息
//三个button,外国和中国的视觉不同,然后按钮顺序和词义对不上,所以你可以直接改text就行了
builder.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
final AlertDialog dialog = builder.create();生成dialog对象
dialog.show();//更新UI 显示对话框 show()
//dialog.dismiss() 和cancle()都能取消,
2 对话框带列表
AlertDialog.Builder builder2 = new AlertDialog.Builder(this);
builder2.setTitle("颜色的选择");
builder2.setItems(R.array.colors,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
switch (which) {
case 0:
tv.setTextColor(Color.YELLOW);
break;
case 1:
tv.setTextColor(Color.BLACK);
break;
default:
break;
}
}
});//string[]类型,显示的是text
builder2.show();//可以直接通过show 不用管dialog
3 带单选的
第一个参数是显示的列表,第二个参数是位置为2的默认被选中状态
builde3.setSingleChoiceItems(attr, 2, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 1:
Toast.makeText(getApplicationContext(), ""+which, 0).show();
break;
default:
break;
}
}
});
4 带多选的
第二个参数 是布尔型数组,因为可能多个为选中状态 注意下监听不是onclick了这里
builder4.setMultiChoiceItems(R.array.mul, new boolean[]{false,false,true}, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
switch (which) {
case 0:
Toast.makeText(getApplicationContext(), which+"isChecked"+isChecked, 0).show();
break;
default:
break;
}
}
});
5 listAdapter 可以适配的布局,和listview 一样
条件,是listAdapter的子类,一般那几个都是的,arrayAdapter,SimpleAdapter,baseAdapter
builder5.setAdapter(getAdapter(), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), which+"isClick", 0).show();
}
});
类似左图,因为没找图片 ,直接代替了,这里用的simpleAdapter
6 进度条
pDialog = new ProgressDialog(this);
pDialog.setTitle("666");
pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pDialog.setMessage("正在下载");
pDialog.setMax(100);
pDialog.setProgress(0);
pDialog.show();
// handler.sendEmptyMessage(0x00); 后面更新handler 用的
这里只要获取到dialog 对象就可以更新,另外进度条是可以在子线程中更新的。
这里两种:
1 常规方式 (刚才发现增加进度有个直接的方法pDialog.incrementProgressBy(int changedProgress))
new Thread(new Runnable() {
@Override
public void run() {
while(true){
if(pDialog.getProgress()>=100)
{
pDialog.dismiss();
}
pDialog.setProgress(pDialog.getProgress()+1);
SystemClock.sleep(100) ;
}
}
}).start();
2 handler
public Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0x00:
if(pDialog.getProgress()>=100){
pDialog.dismiss();
handler.removeMessages(0x00);//异常msg
}
pDialog.setProgress(pDialog.getProgress()+1);
handler.sendEmptyMessageDelayed(0x00, 100);//自己调用自己
break;
default:
break;
}
};
};
好了,差不多这样,还有个dialog.setCancelable(true);设置对话框是否可以被取消。