Android对话框Dialog

    |     2015年7月2日   |   Android UI界面   |     0 条评论   |    1816

对话框顾名思义即人与应用系统对话交互的窗口,登录操作中检查用户信息输入情况可以用对话框进行提示,退出应用时也可以弹出一个退出确认对话框。只要涉及到交互的地方都可以使用对话框.

一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户交互.对话框一般用于提示信息和与当前应用程序直接相关的小功能.
Android API 支持下列类型的对话框对象:

警告对话框 AlertDialog: 一个可以有0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以创建大多数的交互界面, 是推荐的类型.
进度对话框 ProgressDialog: 显示一个进度环或者一个进度条. 由于它是AlertDialog的扩展, 所以它也支持按钮.
日期选择对话框 DatePickerDialog: 让用户选择一个日期.
时间选择对话框 TimePickerDialog: 让用户选择一个时间.
如果你希望自定义你的对话框, 可以扩展Dialog类.

下面我们一起学习Android系统中常用对话框以及实现方式.

一、Android常用对话框结构图
QQ截图20150702145915
1、常用确认对话框                                   2、日期对话框
QQ截图20150702145225  QQ截图20150702150531

3、单选对话框                                              4、多选对话框

QQ截图20150702150553  QQ截图20150702150603

5、自定义对话框

QQ截图20150702150543

二、对话框实现方式
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如果设置则出现在”中间”。

系统对话框一般由三部份组成,标题区域,内容区域,按钮事件处理区域
四、自定义对话框实现

QQ截图20150702150543
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
回复 取消