对话框是提示用户作出决定或输入额外信息的小窗口,通常不会填充整个屏幕,用于进行一些额外交互
Dialog 类是对话框的基类,但应该避免直接实例化 Dialog,而应使用其子类,比如
通过扩展 DialogFragment 类并在 onCreateDialog() 回调方法中创建 AlertDialog
public class MyDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("title")
.setMessage("message")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
return builder.create();
}
}
之后,当创建此类的实例并调用该对象上的 show() 方法时,就可以显示出对话框了
这是 DialogFragment 最基础用法,之后会介绍几种不同的样式。
在 ButtonDialogFragment 类中重载 show() 方法,传入所有需要的参数,并调用 DialogFragment 类本身的 show(FragmentManager manager, String tag) 方法,从而显示对话框。“tag” 参数是系统用于保存片段状态并在必要时进行恢复的唯一标记名称,该标记还允许通过调用 findFragmentByTag() 获取片段的句柄
/**
* Created by 叶应是叶 on 2017/2/23.
*/
public class ButtonDialogFragment extends DialogFragment {
private DialogInterface.OnClickListener positiveCallback;
private DialogInterface.OnClickListener negativeCallback;
private String title;
private String message;
public void show(String title, String message, DialogInterface.OnClickListener positiveCallback,
DialogInterface.OnClickListener negativeCallback, FragmentManager fragmentManager) {
this.title = title;
this.message = message;
this.positiveCallback = positiveCallback;
this.negativeCallback = negativeCallback;
show(fragmentManager, "ButtonDialogFragment");
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(title);
builder.setMessage(message);
builder.setPositiveButton("确定", positiveCallback);
builder.setNegativeButton("取消", negativeCallback);
return builder.create();
}
}
之后,提供调用方法
public void showButtonDialogFragment(View view) {
ButtonDialogFragment buttonDialogFragment = new ButtonDialogFragment();
buttonDialogFragment.show("Hi,你好", "叶应是叶", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "点击了确定 " + which, Toast.LENGTH_SHORT).show();
}
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "点击了取消 " + which, Toast.LENGTH_SHORT).show();
}
}, getFragmentManager());
}
思路类似,对话框包含一个中性按钮
/**
* Created by ZY on 2017/2/23.
*/
public class NeutralDialogFragment extends DialogFragment {
private DialogInterface.OnClickListener neutralCallback;
private String title;
private String message;
private String hint;
public void show(String title, String message, String hint, DialogInterface.OnClickListener neutralCallback,
FragmentManager fragmentManager) {
this.title = title;
this.message = message;
this.hint = hint;
this.neutralCallback = neutralCallback;
show(fragmentManager, "NeutralDialogFragment");
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(title);
builder.setMessage(message);
builder.setNeutralButton(hint, neutralCallback);
return builder.create();
}
}
提供调用方法
public void showNeutralDialogFragment(View view) {
NeutralDialogFragment neutralDialogFragment = new NeutralDialogFragment();
neutralDialogFragment.show("Hi,你好", "叶应是叶", "确定~",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,
"点击了按钮 " + which, Toast.LENGTH_SHORT).show();
}
}, getFragmentManager());
}
/**
* Created by ZY on 2017/2/23.
*/
public class ItemsDialogFragment extends DialogFragment {
private String title;
private String[] items;
private DialogInterface.OnClickListener onClickListener;
public void show(String title, String[] items, DialogInterface.OnClickListener onClickListener,
FragmentManager fragmentManager) {
this.title = title;
this.items = items;
this.onClickListener = onClickListener;
show(fragmentManager, "ItemsDialogFragment");
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(title).setItems(items, onClickListener);
return builder.create();
}
}
提供调用方法
public void showItemsDialogFragment(View view) {
ItemsDialogFragment itemsDialogFragment = new ItemsDialogFragment();
String[] items = {"Hi", "Hello", "叶"};
itemsDialogFragment.show("Hi,你好", items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "点击了第 " + (which + 1) + " 个选项", Toast.LENGTH_SHORT).show();
}
}, getFragmentManager());
}
/**
* Created by ZY on 2017/2/23.
*/
public class MultiChoiceDialogFragment extends DialogFragment {
private String title;
private String[] items;
private DialogInterface.OnMultiChoiceClickListener onMultiChoiceClickListener;
private DialogInterface.OnClickListener positiveCallback;
public void show(String title, String[] items, DialogInterface.OnMultiChoiceClickListener onMultiChoiceClickListener,
DialogInterface.OnClickListener positiveCallback, FragmentManager fragmentManager) {
this.title = title;
this.items = items;
this.onMultiChoiceClickListener = onMultiChoiceClickListener;
this.positiveCallback = positiveCallback;
show(fragmentManager, "MultiChoiceDialogFragment");
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(title).setMultiChoiceItems(items, null, onMultiChoiceClickListener)
.setPositiveButton("确定", positiveCallback);
return builder.create();
}
}
提供调用方法
public void showMultiChoiceDialogFragment(View view) {
MultiChoiceDialogFragment multiChoiceDialogFragment = new MultiChoiceDialogFragment();
final String[] items = {"Hi", "Hello", "叶"};
final List<Integer> integerList = new ArrayList<>();
multiChoiceDialogFragment.show("Hi,你好", items, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
integerList.add(which);
} else {
integerList.remove(which);
}
}
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String hint = "";
for (int i = 0; i < integerList.size(); i++) {
hint = items[integerList.get(i)] + hint;
}
Toast.makeText(MainActivity.this, hint, Toast.LENGTH_SHORT).show();
}
}, getFragmentManager());
}
/**
* Created by ZY on 2017/2/23.
*/
public class SingleChoiceDialogFragment extends DialogFragment {
private String title;
private String[] items;
private DialogInterface.OnClickListener onClickListener;
private DialogInterface.OnClickListener positiveCallback;
public void show(String title, String[] items, DialogInterface.OnClickListener onClickListener,
DialogInterface.OnClickListener positiveCallback, FragmentManager fragmentManager) {
this.title = title;
this.items = items;
this.onClickListener = onClickListener;
this.positiveCallback = positiveCallback;
show(fragmentManager, "SingleChoiceDialogFragment");
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(title).setSingleChoiceItems(items, 0, onClickListener)
.setPositiveButton("确定", positiveCallback);
return builder.create();
}
}
提供调用方法
private int index;
public void showSingleChoiceDialogFragment(View view) {
SingleChoiceDialogFragment singleChoiceDialogFragment = new SingleChoiceDialogFragment();
String[] items = {"Hi", "Hello", "叶"};
singleChoiceDialogFragment.show("Hi,你好", items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
index = which;
}
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "选择了第" + (index + 1) + "项", Toast.LENGTH_SHORT).show();
}
}, getFragmentManager());
}
推荐阅读:
Android——自定义Dialog样式(含背景透明设置和对话框位置设置)
文章转载自Android Dialog使用详解