dialog

357 阅读2分钟

官方文档

  • 避免直接实例化 Dialog,而是使用他的子类AlertDialog、DatePickerDialog 、TimePickerDialog、 ProgressDialog(不推荐使用此微件,因为它会在显示进度的情况下阻止用户与应用交互),这些类可为您的对话框定义样式和结构,但您应使用 DialogFragment 作为对话框的容器。DialogFragment 类提供创建对话框和管理其外观所需的所有控件,而非调用 Dialog 对象上的方法。

  • 使用 DialogFragment 管理对话框可确保它能正确处理生命周期事件,如用户按“返回”按钮或旋转屏幕时。此外,DialogFragment 类还允许您以嵌入式组件的形式在较大界面中重复使用对话框的界面,类似于传统的 Fragment(例如,当您想让对话框界面在大屏幕和小屏幕上具有不同外观时)。

  • AlertDialog API 提供三种列表:

    1.传统的单选列表(setItems/setAdapter(可以使用ListAdapter,使用Loader异步加载))

    2.永久性单选列表(单选按钮,稍后再次打开对话框时显示用户的当前选择 setSingleChoiceItems() )

    3.永久性多选列表(复选框 setMultiChoiceItems())

  • 想让一部分界面在某些情况下显示为对话框,但在其他情况下全屏显示或显示为嵌入式片段(可能取决于设备使用大屏幕还是小屏幕)。DialogFragment 类可提供这种灵活性,因为其仍可充当嵌入式 Fragment。

  • Activity显示为对话框样式

<activity android:theme="@android:style/Theme.Holo.DialogWhenLarge" >

  • 手动关闭DialogFragment,调用DialogFragment的dismiss方法,如果需要在对话框消失时做特定操作,可以重写 onDismiss() 方法
  • 调用Dialog的cancel方法手动取消对话框(例如,为响应对话框中的“取消”按钮)
  • 当每个调用 onCancel() 回调的事件发生时,系统会立即调用 onDismiss()。不过,如果您调用 Dialog.dismiss() 或 DialogFragment.dismiss(),系统会调用 onDismiss(),而非 onCancel()。因此,当用户在对话框中按“肯定”按钮,从视图中移除对话框时,您通常应调用 dismiss()。
  • 设置dialog显示在屏幕底部且背景色为透明

dialog.window?.setGravity(Gravity.BOTTOM) dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))