1. 簡介
Dialog 是一個可以展示信息以及和用戶交互的小窗體.
1.1 Dialog 的組成部分
- Title 標題部分 : 這部分是可選的,只有當內(nèi)容區(qū)域被使用了才可以使用這里.(并不是強制的)
- Content 內(nèi)容區(qū)域 : 顯示信息的部分,可以使用自定義布局.
- Action Buttons 交互按鈕 : 最多三個按鈕.(Positive,Negative, Neutral)
1.2 管理Dialog
使用DialogFragment來管理Dialog可以正確處理生命周期事件. 我們可以創(chuàng)建各種各樣的Dialog,當然可以自定義UI.
2 分類
對于系統(tǒng)的原生的Dialog主要有下面幾種 :
- 普通提示Dialog.
- 列表Dialog.
- 單選列表Dialog.
- 多選列表Dialog.
- 自定義ContentView Dialog.
- 自定義TitleView Dialog.
先看效果圖
效果圖
2.1 普通提示Dialog
實現(xiàn)代碼
/**
* 普通提示Dialog.
*/
public static class NormalTextDialogFragment extends DialogFragment {
/**
* 創(chuàng)建Dialog時調(diào)用
*/
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Log.d(TAG, "onCreateDialog: ");
// 創(chuàng)建構(gòu)造器
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// 設置參數(shù)
builder.setMessage("普通提示Dialog信息")
.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.d(TAG, "onClick: 確定 " + Thread.currentThread().getId());
Toast.makeText(getActivity(), "點擊了確定", Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.d(TAG, "onClick: 取消 " + Thread.currentThread().getId());
Toast.makeText(getActivity(), "點擊了取消", Toast.LENGTH_SHORT).show();
}
});
// 創(chuàng)建對話框并返回.
return builder.create();
}
}
調(diào)用方式
// 創(chuàng)建類實例,調(diào)用 show() 方法就可以顯示了.
new NormalTextDialogFragment().show(getSupportFragmentManager(), "normal_text_dialog");
2.2 列表Dialog
/**
* 列表Dialog
*/
public static class ListDialogFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
return builder
.setTitle("顏色選擇")
.setItems(R.array.color_arrays, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 獲取列表
String[] colors = getResources().getStringArray(R.array.color_arrays);
// 顯示
Toast.makeText(getActivity(), "選擇了 " + colors[which], Toast.LENGTH_SHORT).show();
}
})
.create();
}
}
2.3 單選Dialog
/**
* 單選框Dialog
*/
public static class SingleChoiceDialogFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setSingleChoiceItems(R.array.color_arrays, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 獲取列表
String[] colors = getResources().getStringArray(R.array.color_arrays);
// 顯示
Toast.makeText(getActivity(), "選擇了 " + colors[which], Toast.LENGTH_SHORT).show();
}
})
.setPositiveButton("OK",null)
.setNegativeButton("Cancel", null)
.create();
}
}
2.4 多選Dialog
/**
* 多選項Dialog
*/
public static class MultiChoiceDialogFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setMultiChoiceItems(R.array.color_arrays, null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// 獲取列表
String[] colors = getResources().getStringArray(R.array.color_arrays);
// 顯示
String txt = "點擊了: " + colors[which] + " == " + isChecked;
Toast.makeText(getActivity(), txt, Toast.LENGTH_SHORT).show();
}
})
.setPositiveButton("OK", null)
.setNegativeButton("Cancel", null)
.create();
}
}
2.5 自定義ContentView
/**
* 自定義Content
*/
public static class CustomContentDialogFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
return builder
.setView(R.layout.dialog_custom_content)
.setPositiveButton("OK" , null)
.setNegativeButton("Cancel", null)
.create();
}
}
2.6 自定義Title
/**
* 自定義標題Dialog
*/
public static class CustomTitleDialogFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater li = getActivity().getLayoutInflater();
return builder
.setCustomTitle(li.inflate(R.layout.dialog_custom_title, null))
.setPositiveButton("OK" , null)
.setNegativeButton("Cancel", null)
.create();
}
}