AlertDialog 的介绍
- AlertDialog的方法
返回值 | 方法名 |
---|---|
open Button! | getButton(whichButton: Int) 获获取对话框中使用的按钮之一。如果指定的按钮不存在或对话框尚未完全创建(例如,通过 show() 或 create()),则返回 null。取dialog中某个按钮, whichButton 可选的值: DialogInterface.BUTTON_POSITIVE ,DialogInterface.BUTTON_NEGATIVE ,DialogInterface.BUTTON_NEUTRAL(这是最左侧的按钮) |
open ListView! | getListView() 获取对话框中使用的列表视图。 |
open Boolean | onKeyDown(keyCode: Int, event: KeyEvent) 按下某个键 |
open Boolean | onKeyUp(keyCode: Int, event: KeyEvent) 抬起某个键 |
open Unit | setButton(whichButton: Int, text: CharSequence!, msg: Message!)设置按下按钮时要发送的消息。如果在 show() 之后调用此方法则无效。 |
open Unit | setButton(whichButton: Int, text: CharSequence!, listener: OnClickListener!)设置在按下对话框的正按钮时要调用的侦听器。如果在 show() 之后调用此方法则无效。 |
open Unit | setButton(whichButton: Int, text: CharSequence!, icon: Drawable!, listener: OnClickListener!)设置要与按钮文本一起显示的图标以及在按下对话框的正按钮时要调用的侦听器。如果在 show() 之后调用此方法则无效。 |
open Unit | setCustomTitle(customTitleView: View!)设置自定义的title 如果在 show() 之后调用此方法则无效。 |
open Unit | setIcon(resId: Int) 设置icon,如果不想要icon将resId设置为0 |
open Unit | setIcon(icon: Drawable!) 设置要在标题中使用的 Drawable。 |
open Unit | setIconAttribute(attrId: Int)设置由主题属性提供的图标。例如android.R.attr.alertDialogIcon |
open Unit | setMessage(message: CharSequence!)设置要显示的消息。 |
open Unit | setTitle(title: CharSequence?) 设置标题 |
open Unit | setView(view: View!)设置要在对话框中显示的视图。如果在 show() 之后调用此方法则无效。 |
open Unit | setView(view: View!, viewSpacingLeft: Int, viewSpacingTop: Int, viewSpacingRight: Int, viewSpacingBottom: Int)设置要在对话框中显示的视图,指定在该视图周围显示的间距。如果在 show() 之后调用此方法则无效。 |
- AlertDialog的创建
AlertDialog的构造函数都是protected的,因此我们无法直接通过构造函数实例化,所以SDK提供了 AlertDialog.Builder这个内部类用来创建AlertDialog
构造方法 |
---|
Builder(context: Context!) 为使用默认警报对话框主题的警报对话框创建构建器。 默认警报对话框主题由父上下文主题中的 R.attr.alertDialogTheme 定义。 |
Builder(context: Context!, themeResId: Int) 为使用显式主题资源的警报对话框创建构建器。 指定的主题资源 (themeResId) 应用于父上下文的主题之上。它可以指定为包含完全填充主题的样式资源,例如 R.style.Theme_Material_Dialog,以替换父上下文主题中的所有属性,包括主色和强调色。 为了保留诸如主色和强调色之类的属性,themeResId 可以改为指定为覆盖主题,例如 R.style.ThemeOverlay_Material_Dialog。这将仅覆盖将警报窗口样式化为对话框所需的窗口属性。 或者,可以将 themeResId 指定为 0 以使用 R.attr.alertDialogTheme 的父上下文解析值。 |
返回值 | 方法名 |
---|---|
open AlertDialog! | create()使用提供给此构建器的参数创建 AlertDialog。 调用此方法不会显示对话框。如果不需要额外的处理,可以调用 show() 来创建和显示对话框。 |
open Context! | getContext()为由此生成器创建的对话框返回具有适当主题的上下文。应用程序应该使用这个 Context 来获取 LayoutInflaters 来膨胀将在结果对话框中使用的视图,因为它会导致视图用正确的主题膨胀。 |
open AlertDialog.Builder! | setAdapter(adapter: ListAdapter!, listener: DialogInterface.OnClickListener!)设置由给定 ListAdapter 提供的项目列表作为内容显示在对话框中,您将通过提供的侦听器收到所选项目的通知。 |
open AlertDialog.Builder! | setCancelable(cancelable: Boolean)设置对话框是否可取消。默认为true。 |
open AlertDialog.Builder! | setCursor(cursor: Cursor!, listener: DialogInterface.OnClickListener!, labelColumn: String!)设置由给定 Cursor 提供的项目列表,作为内容显示在对话框中,您将通过提供的侦听器收到所选项目的通知。 |
open AlertDialog.Builder! | setCustomTitle(customTitleView: View!)使用自定义视图 customTitleView 设置标题。 方法 setTitle(int) 和 setIcon(int) 应该足以满足大多数标题,但如果标题需要更多自定义,则提供此方法。使用这将替换通过其他方法设置的标题和图标。 注意:为了确保样式一致,自定义视图应该使用通过 getContext() 获得的警报对话框的主题上下文来膨胀或构造。 |
open AlertDialog.Builder! | setIcon(iconId: Int)设置要在标题中使用的 Drawable 的资源 ID。 优先于使用 setIcon(android.graphics.drawable.Drawable) 设置的值 |
open AlertDialog.Builder! | setIcon(icon: Drawable!)设置要在标题中使用的 Drawable。 注意:为确保样式一致,应使用通过 getContext() 获取的警报对话框的主题上下文来扩充或构造可绘制对象。 |
open AlertDialog.Builder! | setIconAttribute(attrId: Int)设置由主题属性提供的图标。例如android.R.attr#alertDialogIcon。 优先于使用 setIcon(int) 或 setIcon(android.graphics.drawable.Drawable) 设置的值 |
open AlertDialog.Builder! | setInverseBackgroundForced(useInverseBackground: Boolean)将警报对话框设置为使用反向背景,无论内容是什么。(已弃用:此标志仅用于之前的 Material主题。相反,使用警报对话框主题指定窗口背景。) |
open AlertDialog.Builder! | setItems(itemsId: Int, listener: DialogInterface.OnClickListener!)设置要在对话框中显示的项目列表作为内容,您将通过提供的侦听器收到所选项目的通知。这应该是一个数组类型,即 R.array.foo |
open AlertDialog.Builder! | setItems(items: Array<CharSequence!>!, listener: DialogInterface.OnClickListener!)设置要在对话框中显示的项目列表作为内容,您将通过提供的侦听器收到所选项目的通知。 |
open AlertDialog.Builder! | setMessage(messageId: Int) 使用给定的资源 ID 设置要显示的消息。 |
open AlertDialog.Builder! | setMessage(message: CharSequence!)设置要显示的消息。 |
open AlertDialog.Builder! | setMultiChoiceItems(itemsId: Int, checkedItems: BooleanArray!, listener: DialogInterface.OnMultiChoiceClickListener!)设置要在对话框中显示的项目列表作为内容,您将通过提供的侦听器收到所选项目的通知。这应该是一个数组类型,例如R.array.foo。该列表将在每个选中项目的文本右侧显示一个复选标记。单击列表中的项目不会关闭对话框。单击按钮将关闭对话框。 |
open AlertDialog.Builder! | setMultiChoiceItems(items: Array<CharSequence!>!, checkedItems: BooleanArray!, listener: DialogInterface.OnMultiChoiceClickListener!)设置要在对话框中显示的项目列表作为内容,您将通过提供的侦听器收到所选项目的通知。该列表将在每个选中项目的文本右侧显示一个复选标记。单击列表中的项目不会关闭对话框。单击按钮将关闭对话框。 |
open AlertDialog.Builder! | setMultiChoiceItems(cursor: Cursor!, isCheckedColumn: String!, labelColumn: String!, listener: DialogInterface.OnMultiChoiceClickListener!)设置要在对话框中显示的项目列表作为内容,您将通过提供的侦听器收到所选项目的通知。该列表将在每个选中项目的文本右侧显示一个复选标记。单击列表中的项目不会关闭对话框。单击按钮将关闭对话框。 |
open AlertDialog.Builder! | setNegativeButton(textId: Int, listener: DialogInterface.OnClickListener!)设置在按下对话框的Negative按钮时要调用的侦听器。 |
open AlertDialog.Builder! | setNegativeButton(text: CharSequence!, listener: DialogInterface.OnClickListener!)设置在按下对话框的Negative按钮时要调用的侦听器。 |
open AlertDialog.Builder! | setNeutralButton(textId: Int, listener: DialogInterface.OnClickListener!)设置在按下对话框的Neutral按钮时要调用的侦听器。 |
open AlertDialog.Builder! | setNeutralButton(text: CharSequence!, listener: DialogInterface.OnClickListener!)设置在按下对话框的Neutral按钮时要调用的侦听器。 |
open AlertDialog.Builder! | setOnCancelListener(onCancelListener: DialogInterface.OnCancelListener!)设置在对话框取消时将调用的回调。 即使在可取消的对话框中,对话框也可能由于被取消或提供的选项之一被选择以外的原因而被关闭。如果您有兴趣侦听对话框被关闭的所有情况,而不仅仅是在取消时,请参阅 setOnDismissListener |
open AlertDialog.Builder! | setOnDismissListener(onDismissListener: DialogInterface.OnDismissListener!)设置在对话框因任何原因关闭时将调用的回调。 |
open AlertDialog.Builder! | setOnItemSelectedListener(listener: AdapterView.OnItemSelectedListener!)设置在选择列表中的项目时要调用的侦听器。 |
open AlertDialog.Builder! | setOnKeyListener(onKeyListener: DialogInterface.OnKeyListener!)设置将在将key分派到对话框时调用的回调。 |
open AlertDialog.Builder! | setPositiveButton(textId: Int, listener: DialogInterface.OnClickListener!)设置在按下对话框的Positive按钮时要调用的侦听器。 |
open AlertDialog.Builder! | setPositiveButton(text: CharSequence!, listener: DialogInterface.OnClickListener!)设置在按下对话框的Positive按钮时要调用的侦听器。 |
open AlertDialog.Builder! | setSingleChoiceItems(itemsId: Int, checkedItem: Int, listener: DialogInterface.OnClickListener!)设置要在对话框中显示的项目列表作为内容,您将通过提供的侦听器收到所选项目的通知。这应该是一个数组类型,即 R.array.foo 该列表将在选中项的文本右侧显示一个复选标记。单击列表中的项目不会关闭对话框。单击按钮将关闭对话框。 |
open AlertDialog.Builder! | setSingleChoiceItems(cursor: Cursor!, checkedItem: Int, labelColumn: String!, listener: DialogInterface.OnClickListener!)设置要在对话框中显示的项目列表作为内容,您将通过提供的侦听器收到所选项目的通知。该列表将在选中项目的文本右侧显示一个复选标记。单击列表中的项目不会关闭对话框。单击按钮将关闭对话框。 |
open AlertDialog.Builder! | setSingleChoiceItems(items: Array<CharSequence!>!, checkedItem: Int, listener: DialogInterface.OnClickListener!)设置要在对话框中显示的项目列表作为内容,您将通过提供的侦听器收到所选项目的通知。该列表将在选中项目的文本右侧显示一个复选标记。单击列表中的项目不会关闭对话框。单击按钮将关闭对话框。 |
open AlertDialog.Builder! | setSingleChoiceItems(adapter: ListAdapter!, checkedItem: Int, listener: DialogInterface.OnClickListener!)设置要在对话框中显示的项目列表作为内容,您将通过提供的侦听器收到所选项目的通知。该列表将在选中项目的文本右侧显示一个复选标记。单击列表中的项目不会关闭对话框。单击按钮将关闭对话框。. |
open AlertDialog.Builder! | setTitle(titleId: Int)使用给定的资源 ID 设置标题。 |
open AlertDialog.Builder! | setTitle(title: CharSequence!)设置对话框中显示的标题。 |
open AlertDialog.Builder! | setView(layoutResId: Int)将自定义视图资源设置为对话框的内容。资源将被膨胀,将所有顶级视图添加到屏幕上。 |
open AlertDialog.Builder! | setView(view: View!)将自定义视图设置为警报对话框的内容。 使用前 Holo 主题时,如果提供的视图是 ListView 的实例,则将使用浅色背景。 注意:为了确保样式一致,自定义视图应该使用通过 getContext() 获得的警报对话框的主题上下文来膨胀或构造。 |
open AlertDialog! | show()使用提供给此构建器的参数创建 AlertDialog 并立即显示对话框。 |
//Theme.AppCompat.Dialog主题常用的一般有以下属性:
<!-- 背景透明 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 边框 -->
<item name="android:windowFrame">@null</item>
<!-- 是否浮现在activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 是否半透明 -->
<item name="android:windowIsTranslucent">true</item>
<!-- 是否无标题 -->
<item name="android:windowNoTitle">true</item>
<!-- Dialog背景样式 -->
<item name="android:background">@android:color/transparent</item>
<!-- 模糊 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 遮罩层 -->
<item name="android:backgroundDimAmount">0.5</item>
<!-- Dialog的宽度和屏幕的比例 -->
<item name="android:windowMinWidthMinor">80%</item>
<!-- Dialog的最小宽度 -->
<item name="android:minWidth">300dp</item>
<!-- Dialog的最小高度 -->
<item name="android:minHeight">200dp</item>
AlertDialog 的使用
1.提示对话框
val builder = AlertDialog.Builder(this)
builder.setTitle("Title")
builder.setMessage("Message")
//设置Neutral按钮(最左边的按钮)
builder.setNeutralButton("Neutral") { _, _ ->
Toast.makeText(
this@MainActivity,
"点击了Neutral",
Toast.LENGTH_SHORT
).show()
}
//设置Positive按钮
builder.setPositiveButton("Positive") { _, _ ->
Toast.makeText(
this@MainActivity,
"点击了Positive",
Toast.LENGTH_SHORT
).show()
}
//设置Negative按钮
builder.setNegativeButton("Negative") { _, _ ->
Toast.makeText(
this@MainActivity,
"点击了Negative",
Toast.LENGTH_SHORT
).show()
}
//设置在对话框因任何原因关闭时将调用的回调。
builder.setOnDismissListener {
Toast.makeText(
this@MainActivity,
"对话框Dismiss了",
Toast.LENGTH_SHORT
).show()
}
//设置在对话框取消时将调用的回调
// builder.setOnCancelListener {
// Toast.makeText(
// this@MainActivity,
// "对话框Cancel了",
// Toast.LENGTH_SHORT
// ).show()
// }
//点击对话框以外的区域是否让对话框消失,默认为true;
builder.setCancelable(false)
//设置对话框的title左边的图标;
builder.setIcon(resources.getDrawable(R.drawable.ic_launcher_background,null))
val dialog = builder.create()
//这个是Dialog中的方法,builder中没有这个方法
dialog.setOnShowListener {
Toast.makeText(
this@MainActivity,
"对话框Show了",
Toast.LENGTH_SHORT
).show()
}
dialog.show()
-
列表对话框
val builder = AlertDialog.Builder(this) builder.setCancelable(false) builder.setTitle("这是ListDialog") builder.setIcon(R.mipmap.ic_launcher) builder.setNegativeButton("取消") { _, _ -> Toast.makeText( this@MainActivity, "点击取消", Toast.LENGTH_SHORT ).show() } builder.setPositiveButton("确定") { _, _ -> Toast.makeText( this@MainActivity, "点击确定", Toast.LENGTH_SHORT ).show() } val list = arrayOf("语文", "数学", "英语", "化学", "生物", "物理", "体育") //设置列表 builder.setItems(list) { p0, p1 -> Toast.makeText( this@MainActivity, "点击了第${p1}行", Toast.LENGTH_SHORT ).show() } builder.create().show()
-
单选对话框
val builder = AlertDialog.Builder(this) builder.setCancelable(false) builder.setTitle("这是ListDialog") builder.setIcon(R.mipmap.ic_launcher) builder.setNegativeButton("取消") { _, _ -> Toast.makeText( this@MainActivity, "点击取消", Toast.LENGTH_SHORT ).show() } builder.setPositiveButton("确定") { _, _ -> Toast.makeText( this@MainActivity, "点击确定", Toast.LENGTH_SHORT ).show() } val list = arrayOf("语文", "数学", "英语", "化学", "生物", "物理", "体育") //设置列表 builder.setSingleChoiceItems(list,3) { p0, p1 -> Toast.makeText( this@MainActivity, "点击了第${p1}行", Toast.LENGTH_SHORT ).show() } builder.create().show()
-
多选对话框
val builder = AlertDialog.Builder(this) builder.setCancelable(false) builder.setTitle("这是ListDialog") builder.setIcon(R.mipmap.ic_launcher) builder.setNegativeButton("取消") { _, _ -> Toast.makeText( this@MainActivity, "点击取消", Toast.LENGTH_SHORT ).show() } builder.setPositiveButton("确定") { _, _ -> Toast.makeText( this@MainActivity, "点击确定", Toast.LENGTH_SHORT ).show() } val list = arrayOf("语文", "数学", "英语", "化学", "生物", "物理", "体育") var checked = booleanArrayOf(false,false,true,false,false,true,false) //设置列表 builder.setMultiChoiceItems(list,checked ) { _, p1, p2 -> Toast.makeText( this@MainActivity, "点击了第${p1}行 $p2", Toast.LENGTH_SHORT ).show() } builder.create().show()
-
自定义弹窗
val builder = AlertDialog.Builder(this, R.style.CustomDialog) builder.setCancelable(true) val view = layoutInflater.inflate(R.layout.custom_layout, null, false) val binding = CustomLayoutBinding.bind(view) builder.setView(view) val dialog = builder.create() dialog.show() binding.cancelButton.setOnClickListener { Toast.makeText( this@MainActivity, "点击了取消", Toast.LENGTH_SHORT ).show() dialog.dismiss() } binding.okButton.setOnClickListener { Toast.makeText( this@MainActivity, "点击了确认", Toast.LENGTH_SHORT ).show() }
custom_layout.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/cancel_button" android:layout_width="100dp" android:layout_height="50dp" android:layout_marginLeft="40dp" android:backgroundTint="#f00" android:text="取消" android:textColor="#0f0" android:textSize="20sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" /> <Button android:id="@+id/ok_button" android:layout_width="100dp" android:layout_height="50dp" android:layout_marginRight="40dp" android:backgroundTint="#0f0" android:text="确定" android:textColor="#f00" android:textSize="20sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <TextView android:id="@+id/message" android:layout_width="wrap_content" android:layout_height="80dp" android:layout_marginTop="60dp" android:gravity="center" android:text="Message" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/title" app:layout_constraintBottom_toTopOf="@id/cancel_button" /> <TextView android:id="@+id/title" android:layout_width="0dp" android:layout_height="30dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:gravity="center" android:text="标题" app:layout_constraintBottom_toTopOf="@id/message" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
如何修改Dialog的宽度和高度
直接在layout.xml修改layout_width和layout_height是无法修改Dialog的宽和高的需要自定义一个theme,使用这个theme创建AlertDialog.
<style name="CustomDialog" parent="Theme.AppCompat.Dialog"> <!-- dialog 宽度与屏幕比例--> <!-- <item name="android:windowMinWidthMinor">80%</item>--> <!--设置最小宽度--> <item name="android:minWidth">300dp</item> <!--设置最小高度--> <item name="android:minHeight">200dp</item> </style>
通过代码修改AlertDialog的大小
//这段代码必须放在show()方法之后,否则没有作用 dialog.window?.setLayout(100,200)
如何修改AlertDialog的位置
//这段代码必须放在show()方法之前,否则没有作用 当x,y都为0则居中显示 val para = dialog.window?.attributes para?.x = 100 para?.y = 100