AlertDialog的六种创建方式
创建AlertDialog的步骤:
1、创建AlertDialog.Builder对象
2、调用Builder对象的setTitle方法设置标题,setIcon方法设置图标
3、调用Builder相关方法如setMessage方法、setItems方法、setSingleChoiceItems方法、setMultiChoiceItems方法、setAdapter方法、setView方法设置不同类型的对话框内容。
4、调用setPositiveButton、setNegativeButton、setNeutralButton设置多个按钮
5、调用Builder对象的create()方法创建AlertDialog对象
6、调用AlertDialog对象的show()方法将对话框显示出来
使用方法注意:
setCancelable(false) 点击返回键、其他空白区域是否弹窗消失【false 不消失,true消失;默认true】
一、setMessage:设置对话框内容为简单文本内容
// 创建构建器
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置参数
builder.setTitle("请做出选择").setIcon(R.drawable.ic_launcher)
.setMessage("我美不美")
.setPositiveButton("美", new OnClickListener() {// 积极
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "恭喜你答对了", 0)
.show();
}
}).setNegativeButton("不美", new OnClickListener() {// 消极
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "一点也不老实", 0)
.show();
}
}).setNeutralButton("不知道", new OnClickListener() {// 中间级
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "快睁开眼瞅瞅", 0)
.show();
}
});
builder.create().show();
二、setItem:设置文本框内容为简单列表项
// 创建数据
final String[] items = new String[] { "北京", "上海", "广州", "深圳" };
// 创建对话框构建器
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置参数
builder.setIcon(R.drawable.ic_launcher).setTitle("提示")
.setItems(items, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, items[which],
Toast.LENGTH_SHORT).show();
}
});
builder.create().show();
三、setSingleChoiceItems()设置对话框内容为单选列表项
// 创建数据
final String[] items = new String[] { "北京", "上海", "广州", "深圳" };
// 创建对话框构建器
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置参数
builder.setIcon(R.drawable.ic_launcher).setTitle("提示")
.setSingleChoiceItems(items, 0, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, items[which],
Toast.LENGTH_SHORT).show();
}
});
builder.create().show();
四、setMultiChoiceItems()设置对话框内容为多选项列表
// 创建数据
final String[] items = new String[] { "北京", "上海", "广州", "深圳" };
// 创建对话框构建器
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher)
.setTitle("提示")
.setMultiChoiceItems(items,
new boolean[] { true, true, false, false, false },
new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which, boolean isChecked) {
// TODO Auto-generated method stub
if (isChecked) {
Toast.makeText(MainActivity.this,
items[which], 0).show();
}
}
});
builder.create().show();
五、setAdapter()设置对话框内容为自定义列表项(这里是一个布局)
// 创建数据
final String[] items = new String[] { "北京", "上海", "广州", "深圳" };
// 创建对话框构建器
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示")
.setIcon(R.drawable.ic_launcher)
.setAdapter(
new ArrayAdapter<String>(MainActivity.this,
R.layout.item, R.id.tv, items),
new OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, items[which],
0).show();
}
});
builder.create().show();
六、setView()设置对话框为自定义View
// 创建对话框构建器
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 获取布局
View view2 = View.inflate(MainActivity.this, R.layout.login, null);
// 获取布局中的控件
final EditText username = (EditText) view2.findViewById(R.id.username);
final EditText password = (EditText) view2.findViewById(R.id.password);
final Button button = (Button) view2.findViewById(R.id.btn_login);
// 设置参数
builder.setTitle("Login").setIcon(R.drawable.ic_launcher)
.setView(view2);
// 创建对话框
final AlertDialog alertDialog = builder.create();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String uname = username.getText().toString().trim();
String psd = password.getText().toString().trim();
if (uname.equals("shenhua") && psd.equals("123456")) {
Toast.makeText(MainActivity.this, "登录成功", 0).show();
}
Toast.makeText(MainActivity.this, "登录失败", 0).show();
alertDialog.dismiss();// 对话框消失
}
});
alertDialog.show();
重点来了,这是工具类
/**
* 各种dialog
*/
public class DialogUtil {
/***
* 创建单选对话框
*
*/
public static Dialog createSingleSelectionDialog(Context context, String title,
String[] datas, DialogInterface.OnClickListener linister) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
if (!TextUtils.isEmpty(title)) {
builder.setTitle(title);
} else {
builder.setTitle("温馨提示");
}
builder.setItems(datas, linister);
Dialog dialog = builder.create();
builder.show();
return dialog;
}
/***
* 创建对话框
*
*/
public static Dialog createMessageDialog(Context context, String title,
String data, DialogInterface.OnClickListener linister) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
if (!TextUtils.isEmpty(title)) {
builder.setTitle(title);
} else {
builder.setTitle("温馨提示");
}
builder.setMessage(data);
Dialog dialog = builder.create();
builder.show();
return dialog;
}
/**
* 确定框
*/
public static Dialog createNoticeDialog(Context context, String title, String message,
DialogInterface.OnClickListener linister) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(title).setMessage(message).setPositiveButton("确定", linister);
Dialog dialog = builder.create();
builder.show();
return dialog;
}
/**
* 加载框
*/
public static Dialog loadingDialog(Context context, String message) {
AlertDialog dialog = new SpotsDialog.Builder().setContext(context).setMessage(message).build();
dialog.show();
return dialog;
}
/**
* 树形
*/
public static Dialog TreeItemDialog(Context context, String title, TreeItemDialog.PriorityListener listener) {
AlertDialog dialog = new TreeItemDialog.Builder().setContext(context).setMessage(title).setPriorityListener(listener).build();
dialog.show();
return dialog;
}
}
使用:
Dialog dialog = DialogUtil.loadingDialog(context, "加载中");
工具列里面用到的自定义类
/**
* 加载框
*/
public class SpotsDialog extends AlertDialog {
public static class Builder {
private Context context;
private String message;
private int messageId;
private int themeId;
private boolean cancelable = true; // default dialog behaviour
private OnCancelListener cancelListener;
public Builder setContext(Context context) {
this.context = context;
return this;
}
public Builder setMessage(String message) {
this.message = message;
return this;
}
public Builder setMessage(int messageId) {
this.messageId = messageId;
return this;
}
public Builder setTheme(int themeId) {
this.themeId = themeId;
return this;
}
public Builder setCancelable(boolean cancelable) {
this.cancelable = cancelable;
return this;
}
public Builder setCancelListener(OnCancelListener cancelListener) {
this.cancelListener = cancelListener;
return this;
}
public AlertDialog build() {
return new SpotsDialog(
context,
messageId != 0 ? context.getString(messageId) : message,
themeId != 0 ? themeId : R.style.SpotsDialogDefault,
cancelable,
cancelListener
);
}
}
private static final int DELAY = 150;
private static final int DURATION = 1500;
private int size;
private AnimatedView[] spots;
private AnimatorPlayer animator;
private CharSequence message;
private SpotsDialog(Context context, String message, int theme, boolean cancelable, OnCancelListener cancelListener) {
super(context, theme);
this.message = message;
setCancelable(cancelable);
if (cancelListener != null) {
setOnCancelListener(cancelListener);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dmax_spots_dialog);
setCanceledOnTouchOutside(false);
initMessage();
initProgress();
}
@Override
protected void onStart() {
super.onStart();
for (AnimatedView view : spots) {
view.setVisibility(View.VISIBLE);
}
animator = new AnimatorPlayer(createAnimations());
animator.play();
}
@Override
protected void onStop() {
super.onStop();
animator.stop();
}
@Override
public void setMessage(CharSequence message) {
this.message = message;
if (isShowing()) {
initMessage();
}
}
//~
private void initMessage() {
if (message != null && message.length() > 0) {
((TextView) findViewById(R.id.dmax_spots_title)).setText(message);
}
}
private void initProgress() {
ProgressLayout progress = (ProgressLayout) findViewById(R.id.dmax_spots_progress);
size = progress.getSpotsCount();
spots = new AnimatedView[size];
int size = getContext().getResources().getDimensionPixelSize(R.dimen.spot_size);
int progressWidth = getContext().getResources().getDimensionPixelSize(R.dimen.progress_width);
for (int i = 0; i < spots.length; i++) {
AnimatedView v = new AnimatedView(getContext());
v.setBackgroundResource(R.drawable.dmax_spots_spot);
v.setTarget(progressWidth);
v.setXFactor(-1f);
v.setVisibility(View.INVISIBLE);
progress.addView(v, size, size);
spots[i] = v;
}
}
private Animator[] createAnimations() {
Animator[] animators = new Animator[size];
for (int i = 0; i < spots.length; i++) {
Animator move = ObjectAnimator.ofFloat(spots[i], "xFactor", 0, 1);
move.setDuration(DURATION);
move.setInterpolator(new HesitateInterpolator());
move.setStartDelay(DELAY * i);
animators[i] = move;
}
return animators;
}
}
/**
* 树形
*/
public class TreeItemDialog extends AlertDialog {
private Map<String, String> data;
private Map<String, String> childData;
private Context context;
private String message;
private PriorityListener listener;
private String deptId;
private String deptIdName;
private AndroidTreeView tView;
private TreeNode root;
private RelativeLayout contentView;
private TreeNode node1;
private TreeNode.TreeNodeClickListener nodeClickListener;
private ImageView iv_fr_search;
private String text;
private RecyclerView rv_search_result;
public static class Builder {
private Context context;
private String message;
private PriorityListener listener;
private OnCancelListener cancelListener;
public Builder setContext(Context context) {
this.context = context;
return this;
}
public Builder setMessage(String message) {
this.message = message;
return this;
}
public Builder setPriorityListener(PriorityListener listener) {
this.listener = listener;
return this;
}
public AlertDialog build() {
return new TreeItemDialog(context, message, listener);
}
}
protected TreeItemDialog(Context context, String message, TreeItemDialog.PriorityListener listener) {
super(context);
this.context = context;
this.message = message;
this.listener = listener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tree_item_dialog);
setCanceledOnTouchOutside(false);
initData();
}
public void initData() {
data = DicDataCache.get().getAjlb();
childData = DicDataCache.get().getAjlbxj();
iv_fr_search = ((ImageView) findViewById(R.id.iv_fr_search));
rv_search_result = ((RecyclerView) findViewById(R.id.rv_search_result));
contentView = (RelativeLayout) findViewById(R.id.rt_tree_item);
((TextView) findViewById(R.id.rt_tree_item_title)).setText(message);
TreeNodeAdapter.IconTreeItem nodeItem = new TreeNodeAdapter.IconTreeItem();
root = new TreeNode(nodeItem).setViewHolder(new TreeNodeAdapter(context));
for (Map.Entry<String, String> map : data.entrySet()) {
String par = map.getKey().substring(0, 2);
String parLastFour = map.getKey().substring(2, 6);
TreeNode parent;
if (parLastFour.equals("0000")) {
parent = new TreeNode(new TreeNodeAdapter.IconTreeItem(map.getValue(), map.getKey(), "1", "0"));
} else {
parent = new TreeNode(new TreeNodeAdapter.IconTreeItem(map.getValue(), map.getKey(), "0", "0"));
}
root.addChild(parent);
}
tView = new AndroidTreeView(context, root);
nodeClickListener = new TreeNode.TreeNodeClickListener() {
@Override
public void onClick(TreeNode node, Object value) {
node1 = node;
deptId = ((TreeNodeAdapter.IconTreeItem) value).code;
String isParent = ((TreeNodeAdapter.IconTreeItem) value).isParent;
deptIdName = ((TreeNodeAdapter.IconTreeItem) value).text;
String isPeople = ((TreeNodeAdapter.IconTreeItem) value).isPeople;
if (isParent.equals("1") && !isPeople.equals("1")) {
String par = deptId.substring(0, 2);
String parLastFour = deptId.substring(2, 6);
if (parLastFour.equals("0000")) {
for (Map.Entry<String, String> map : childData.entrySet()) {
if (par.equals(map.getKey().substring(0, 2))) {
TreeNode parent = new TreeNode(new TreeNodeAdapter.IconTreeItem(map.getValue(), map.getKey(), "1", "1"));
node1.addChild(parent);
}
}
}
}
if (node1.getChildren() == null || node1.getChildren().size() == 0) {
listener.refreshPriorityUI(deptIdName, deptId);
}
}
};
tView.setDefaultAnimation(true);
tView.setDefaultContainerStyle(R.style.TreeNodeStyleCustom);
tView.setDefaultViewHolder(TreeNodeAdapter.class);
tView.setDefaultNodeClickListener(nodeClickListener);
contentView.addView(tView.getView());
}
public interface PriorityListener {
public void refreshPriorityUI(String name, String code);
}
}