Android对话框Dialog
对话框顾名思义即人与应用系统对话交互的窗口,登录操作中检查用户信息输入情况可以用对话框进行提示,退出应用时也可以弹出一个退出确认对话框。只要涉及到交互的地方都可以使用对话框.
一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户交互.对话框一般用于提示信息和与当前应用程序直接相关的小功能.
Android API 支持下列类型的对话框对象:
警告对话框 AlertDialog: 一个可以有0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以创建大多数的交互界面, 是推荐的类型.
进度对话框 ProgressDialog: 显示一个进度环或者一个进度条. 由于它是AlertDialog的扩展, 所以它也支持按钮.
日期选择对话框 DatePickerDialog: 让用户选择一个日期.
时间选择对话框 TimePickerDialog: 让用户选择一个时间.
如果你希望自定义你的对话框, 可以扩展Dialog类.
下面我们一起学习Android系统中常用对话框以及实现方式.
一、Android常用对话框结构图
1、常用确认对话框 2、日期对话框
3、单选对话框 4、多选对话框
5、自定义对话框
二、对话框实现方式
1.首先实例化对话框,设置相关属性.
如:
ProgressDialog mProgressDialog = new ProgressDialog(this); mProgressDialog.setMessage("信息下载加载中...."); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
2.调用show方法显示.
mProgressDialog.show();
3.调用dismiss方法隐藏
mProgressDialog.dismiss();
三、AlertDialog对话框实例化与相关属性设置
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("操作提示"); builder.setMessage("是否退出?"); //设置按钮事件 builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DialogAcitivity.this, "取消", Toast.LENGTH_SHORT).show(); } }); //创建对话框 AlertDialog dialog = builder.create();
android中setPositiveButton、setNegativeButton和setNeutralButton的区别是什么?
在对话框中出现的位置不同setPositiveButton出现在最右,Button功能设置为”确定”; setNegativeButton设置的是出现在最左,一般把最右的button功能设置为“取消”,也就是调用dismiss();setNeutralButton如果设置则出现在”中间”。
系统对话框一般由三部份组成,标题区域,内容区域,按钮事件处理区域
四、自定义对话框实现
1.定义一个类继承AlertDialog
public class MyWeixinDialog extends AlertDialog { private Activity mContext; public MyWeixinDialog(Activity context) { super(context); mContext = context; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.exit_dialog); Button confirm = (Button) findViewById(R.id.exitBtn0); Button cancel = (Button) findViewById(R.id.exitBtn1); confirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mContext.finish(); } }); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); } }
<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/exit_layout" android:layout_width="280dp" android:layout_height="wrap_content" android:background="@drawable/confirm_dialog_bg2" android:gravity="center_horizontal" android:layout_gravity="center_horizontal" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dp" android:padding="5dp" android:text="退出微信" android:textColor="#333" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="1dp" android:gravity="center_horizontal" android:padding="10dp" android:text="退出后,你将收不到新的消\n息.确定要退出?" android:textColor="#333" android:textSize="16sp" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:layout_marginTop="33dp" > <Button android:id="@+id/exitBtn0" android:layout_width="110dp" android:layout_height="wrap_content" android:background="@drawable/btn_style_green" android:gravity="center" android:onClick="exitbutton0" android:text="是" android:textColor="#fff" android:textSize="16sp" /> <Button android:id="@+id/exitBtn1" android:layout_width="110dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:background="@drawable/btn_style_white" android:gravity="center" android:onClick="exitbutton1" android:text="否" android:textColor="#333" android:textSize="16sp" /> </LinearLayout> </LinearLayout>
2.实例化
Dialog weixinDialog = new MyWeixinDialog(this);
3.显示
weixinDialog.show();
五、对话框与Activity绑定
Activities提供了一种方便管理的创建、保存、回复的对话框机制,例如onCreateDialog(int),onPrepareDialog(int,Dialog),showDialog(int),dismissDialog(int)等方法,如果使用这些方法的话,Activity将通过getOwnerActivity()方法返回该Activity管理的对话框(dialog).
onCreateDialog(int):当你使用这个回调函数时,Android系统会有效的设置这个Activity为每个对话框的所有者,从而自动管理每个对话框的状态并挂靠到Activity上。这样,每个对话框继承这个Activity的特定属性。比如,当一个对话框打开时,菜单键显示为这个Activity定义的选项菜单,音量键修改Activity使用的音频流。
showDialog(int):当你想要显示一个对话框时,调用showDialog(intid)方法并传递一个唯一标识这个对话框的整数。当对话框第一次被请求时,Android从你的Activity中调用onCreateDialog(intid),你应该在这里初始化这个对话框Dialog。这个回调方法被传以和showDialog(intid)相同的ID。当你创建这个对话框后,在Activity的最后返回这个对象。
onPrepareDialog(int,Dialog):在对话框被显示之前,Android还调用了可选的回调函数onPrepareDialog(intid,Dialog).如果你想在每一次对话框被打开时改变它的任何属性,你可以定义这个方法。这个方法在每次打开对话框时被调用,而onCreateDialog(int)仅在对话框第一次打开时被调用。如果你不定义onPrepareDialog(),那么这个对话框将保持和上次打开时一样。这个方法也被传递以对话框的ID,和在onCreateDialog()中创建的对话框对象。
dismissDialog(int):当你准备关闭对话框时,你可以通过对这个对话框调用dismiss()来消除它。如果需要,你还可以从这个Activity中调用dismissDialog(intid)方法,这实际上将为你对这个对话框调用dismiss()方法。如果你想使用onCreateDialog(intid)方法来管理你对话框的状态(就如同在前面的章节讨论的那样),然后每次你的对话框消除的时候,这个对话框对象的状态将由该Activity保留。如果你决定不再需要这个对象或者清除该状态是重要的,那么你应该调用removeDialog(intid)。这将删除任何内部对象引用而且如果这个对话框正在显示,它将被消除。
在Activity类中调用showDialog(1)方法时系统会自动调用onCreateDialog方法创建Dialog显示
我们只需在onCreateDialog方法中实现返回Dialog.
showDialog(1);
@Override protected Dialog onCreateDialog(int id) { switch(id){ case 1: return new DatePickerDialog(); } }
六、对话框最优实现方式采用DialogFragment实现如下:
/** * 调用方法: * MyAlertDialogFragment dialogFragment = new MyAlertDialogFragment(); * dialogFragment.show(getFragmentManager(), "dialog"); * */ public class MyAlertDialogFragment extends DialogFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } //法二 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.article_view, container, false); View tv = v.findViewById(R.id.article); ((TextView)tv).setText(mTitle); return v; } // 法一 @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return new AlertDialog.Builder(getActivity()) .setIcon(android.R.drawable.ic_dialog_alert) .setTitle("提示框") .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { Toast.makeText(getActivity(), "确定", Toast.LENGTH_SHORT).show(); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { Toast.makeText(getActivity(), "取消", Toast.LENGTH_SHORT).show(); } }).create(); } }
调用
MyAlertDialogFragment dialogFragment = new MyAlertDialogFragment(); dialogFragment.show(getFragmentManager(), "dialog");
转载请注明来源:Android对话框Dialog