博主话不多,我们直接代码: 代码中注释会写的很清楚
MainActivity.java
public class MainActivity extends Activity implements CustomDialogFragment.Callback {
private String[] items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
items = getResources().getStringArray(R.array.skills);
}
public void showAlertDialog(View v) {
// Builder 模式:建造者模式
// AlertDialog 的构造方法【受保护】,使用 Builder 创建对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// builder.setIcon()
builder.setTitle("标题");
builder.setMessage("对话框的文本内容");
// 不可取消【默认 true】
builder.setCancelable(false);
// 设置按钮:确定、取消、中立【显示的位置固定】
builder.setPositiveButton(R.string.button_ok, dialogListener);
builder.setNegativeButton(R.string.button_cancel, dialogListener);
builder.setNeutralButton(R.string.button_neutral, dialogListener);
// 创建对话框
AlertDialog dialog = builder.create();
dialog.show();
}
OnClickListener dialogListener = new DialogInterface.OnClickListener() {
/**
* 对话框中按钮的点击事件
* @param dialog 事件源所在的对话框
* @param which 事件源(按钮)
*/
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
// 确定
break;
case DialogInterface.BUTTON_NEGATIVE:
// 取消
break;
case DialogInterface.BUTTON_NEUTRAL:
// 中立
break;
}
}
};
public void showListAlertDialog(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("列表对话框");
// 参数一:列表中的数据集
// 参数二:监听器
builder.setItems(items, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// which 是列表中选中项的位置【索引】
showToast(items[which]);
}
});
// 设置取消按钮【不需要确定按钮,选中即确定】
builder.setNegativeButton(R.string.button_cancel, null);
AlertDialog dialog = builder.create();
dialog.show();
}
public void showSingleListAlertDialog(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("单选列表对话框");
// 参数一:列表中的数据集
// 参数二:默认选中的位置,-1 无默认选中项
builder.setSingleChoiceItems(items, -1, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// which 是列表中选中项的位置【索引】
showToast(items[which]);
}
});
builder.setNegativeButton(R.string.button_cancel, null);
builder.setPositiveButton(R.string.button_ok, null);
AlertDialog dialog = builder.create();
dialog.show();
}
public void showMultiListAlertDialog(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("多选列表对话框");
builder.setCancelable(false);
final boolean[] checkedItems = new boolean[items.length];
// 参数一:列表中的数据集
// 参数二:列表中各项的状态(true 为选中、false 为未选中)
// 参数三:多选监听器 DialogInterface.OnMultiChoiceClickListener
builder.setMultiChoiceItems(items,
checkedItems,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
checkedItems[which] = isChecked;
}
});
builder.setNegativeButton(R.string.button_cancel, null);
builder.setPositiveButton(R.string.button_ok, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showToast(Arrays.toString(checkedItems));
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
public void showMyDialog(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("自定义对话框");
// 加载自定义视图
// 方案一
// builder.setView(R.layout.dialog_demo);
// 方案二
View view = getLayoutInflater().inflate(R.layout.dialog_demo, null);
// EditText editTextName = (EditText) view.findViewById(R.id.editText_name);
builder.setView(view);
builder.setPositiveButton(R.string.button_ok, null);
builder.setNegativeButton(R.string.button_cancel, null);
AlertDialog dialog = builder.create();
dialog.show();
}
public void showDateDialog(View v) {
// 获得当前日期
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH);
int day = now.get(Calendar.DAY_OF_MONTH);
// 参数一:上下文
// 参数二:主题【可选】
// 参数三:监听器 DatePickerDialog.OnDateSetListener
DatePickerDialog dialog = new DatePickerDialog(
this,
android.R.style.Theme_DeviceDefault_Light_Dialog,
dateListener,
year,
month,
day);
dialog.show();
}
DatePickerDialog.OnDateSetListener dateListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
}
};
public void showTimeDialog(View v) {
// 获得当前时间
Calendar now = Calendar.getInstance();
int hourOfDay = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
boolean is24Hour = true;
// 参数一:上下文
// 参数二:监听器 TimePickerDialog.OnTimeSetListener
// 参数三:小时
// 参数四:分钟
// 参数五:是否以 24 小时方式显示时间
TimePickerDialog dialog = new TimePickerDialog(
this,
timeListener,
hourOfDay,
minute,
is24Hour);
dialog.show();
}
TimePickerDialog.OnTimeSetListener timeListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
}
};
public void showFragmentDialog(View v) {
MyDialogFragment dialogFragment = new MyDialogFragment();
dialogFragment.show(getFragmentManager(), "fg");
}
public void showCustomFragmentDialog(View v) {
FragmentManager fm = getFragmentManager();
CustomDialogFragment dialog = CustomDialogFragment.getInstance("自定义对话框");
dialog.show(fm, "dialog_tag");
}
@Override
public void doOk() {
}
@Override
public void doCancel() {
}
private void showToast(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
CustomDialogFragment.java
/**
* 自定义对话框
*/
public class CustomDialogFragment extends DialogFragment implements View.OnClickListener {
/**
* 对话框标题
*/
public static final String EXTRA_TITLE = "title";
private Callback callback;
private EditText editTextName;
private EditText editTextPassword;
private Button buttonOk;
private Button buttonCancel;
private static final String TAG = "CustomDialogFragment";
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Log.d(TAG, "onAttach");
if (activity instanceof Callback) {
callback = (Callback) activity;
}
}
/**
* 创建示例
*
* @param title 对话框标题
* @return 对话框示例
*/
public static CustomDialogFragment getInstance(String title) {
CustomDialogFragment fragment = new CustomDialogFragment();
Bundle bundle = new Bundle();
bundle.putString(EXTRA_TITLE, title);
fragment.setArguments(bundle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
String title = getArguments().getString(EXTRA_TITLE);
// 设置标题
getDialog().setTitle(title);
View view = inflater.inflate(R.layout.dialog_custom, container);
editTextName = (EditText) view.findViewById(R.id.editText_name);
editTextPassword = (EditText) view.findViewById(R.id.editText_password);
buttonOk = (Button) view.findViewById(R.id.button_ok);
buttonCancel = (Button) view.findViewById(R.id.button_cancel);
// 获得焦点
editTextName.requestFocus();
// 显示软键盘
getDialog().getWindow().setSoftInputMode
(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
buttonOk.setOnClickListener(this);
buttonCancel.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_ok:
callback.doOk();
break;
case R.id.button_cancel:
callback.doCancel();
break;
}
// 消失
dismiss();
}
/**
* CustomDialogFragment 的回调方法
*/
interface Callback {
void doOk();
void doCancel();
}
}
MyDialogFragment.java
/**
* 自定义对话框
*/
public class MyDialogFragment
extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// 获得当前日期
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH);
int day = now.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(
getActivity(),
android.R.style.Theme_DeviceDefault_Light,
this,
year,
month,
day);
return dialog;
}
@Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
}
}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView android:text="提示对话框(AlertDialog)" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView_alert"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="对话框"
android:id="@+id/button"
android:layout_below="@id/textView_alert"
android:layout_alignParentStart="true"
android:onClick="showAlertDialog"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="列表对话框"
android:id="@+id/button2"
android:layout_alignBottom="@+id/button"
android:layout_toEndOf="@+id/button"
android:onClick="showListAlertDialog"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="单选列表对话框"
android:id="@+id/button3"
android:layout_alignTop="@+id/button2"
android:layout_toEndOf="@+id/button2"
android:onClick="showSingleListAlertDialog"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="多选列表对话框"
android:id="@+id/button4"
android:layout_below="@+id/button"
android:layout_alignParentStart="true"
android:onClick="showMultiListAlertDialog"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自定义对话框"
android:id="@+id/button5"
android:layout_alignBottom="@+id/button4"
android:layout_toEndOf="@+id/button4"
android:onClick="showMyDialog"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="日期、时间选择对话框"
android:id="@+id/textView"
android:layout_below="@+id/button4"
android:layout_alignParentStart="true"
android:layout_marginTop="16dp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="日期"
android:id="@+id/button6"
android:layout_below="@+id/textView"
android:layout_alignParentStart="true"
android:onClick="showDateDialog"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="时间"
android:id="@+id/button7"
android:layout_alignBottom="@+id/button6"
android:layout_alignStart="@+id/button2"
android:onClick="showTimeDialog"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DialogFragment 对话框"
android:id="@+id/textView2"
android:layout_below="@+id/button6"
android:layout_alignParentStart="true"
android:layout_marginTop="16dp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="对话框"
android:id="@+id/button8"
android:layout_below="@+id/textView2"
android:layout_alignParentStart="true"
android:onClick="showFragmentDialog"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自定义对话框"
android:id="@+id/button9"
android:layout_alignBottom="@+id/button8"
android:layout_alignStart="@+id/button7"
android:onClick="showCustomFragmentDialog"/>
</RelativeLayout>
dialog_custom.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="网络名称"
android:textSize="12sp" />
<EditText
android:id="@+id/editText_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="密码"
android:textSize="12sp" />
<EditText
android:id="@+id/editText_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberPassword" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_ok"
android:id="@+id/button_ok"
android:layout_gravity="right"
android:layout_marginTop="24dp"
style="@android:style/Widget.DeviceDefault.Button.Borderless"
android:textColor="@android:color/holo_blue_dark"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_cancel"
android:id="@+id/button_cancel"
android:layout_gravity="right"
style="@android:style/Widget.DeviceDefault.Button.Borderless"
android:textColor="@android:color/holo_blue_dark"/>
</LinearLayout>
dialog_demo.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="网络名称"
android:textSize="12sp" />
<EditText
android:id="@+id/editText_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="密码"
android:textSize="12sp" />
<EditText
android:id="@+id/editText_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberPassword" />
</LinearLayout>
当然博主还是希望观看的同仁,还是仔细去研究一下代码,而不是去全部复制下来去使用。
见笑了!
Just do it!! lzl
如有不懂欢迎致件:zhilin_comeon@163.com 或加群 570381012