普通对话框
fun danxuan(view: View) {
var dialog = AlertDialog.Builder(this)
dialog.setTitle("黄立志帅不帅")
dialog.setMessage("请选择")
dialog.setNegativeButton("确定", object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface?, which: Int) {
Toast.makeText(this@MainActivity, "谢谢", Toast.LENGTH_SHORT).show()
}
})
dialog.setPositiveButton("确定", object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface?, which: Int) {
Toast.makeText(this@MainActivity, "谢谢", Toast.LENGTH_SHORT).show()
}
})
dialog.create().show()
}
这里getapplicationcontext改为this 原因:
用getapplicationcontext不知道放那个activity
单选对话框
private fun singleDialog() {
val builder = AlertDialog.Builder(this@MainActivity)
builder.setTitle("单选对话框")
val items = arrayOf("男", "女") // 创建一个存放选项的数组
val checkedItems = booleanArrayOf(true, false) // 存放选中状态,true为选中
// ,false为未选中,和setSingleChoiceItems中第二个参数对应
// 为对话框添加单选列表项
// 第一个参数存放选项的数组,第二个参数存放默认被选中的项,第三个参数点击事件
builder.setSingleChoiceItems(items, 0, object : DialogInterface.OnClickListener {
override fun onClick(arg0: DialogInterface?, arg1: Int) {
for (i in checkedItems.indices) {
checkedItems[i] = false
}
checkedItems[arg1] = true
}
})
builder.setNegativeButton("取消", object : DialogInterface.OnClickListener {
override fun onClick(arg0: DialogInterface, arg1: Int) {
// TODO Auto-generated method stub
arg0.dismiss()
}
})
builder.setPositiveButton("确定", object : DialogInterface.OnClickListener {
override fun onClick(arg0: DialogInterface?, arg1: Int) {
// TODO Auto-generated method stub
var str = ""
for (i in checkedItems.indices) {
if (checkedItems[i]) {
str = items[i]
}
}
Toast.makeText(this@MainActivity, "您选择了$str", Toast.LENGTH_SHORT).show()
}
})
builder.create().show()
}
多选对话框
private fun multipleDialog() {
val builder = AlertDialog.Builder(this@MainActivity)
builder.setTitle("多选对话框")
val items = arrayOf("数学", "语文", "英语", "政治") // 存放选项的数组
val checkedItems = booleanArrayOf(false, true, false, false)
// 第一个参数选项,第二个参数选项的状态,第三个点击事件
builder.setMultiChoiceItems(items, checkedItems
) { arg0, arg1, arg2 -> // TODO Auto-generated method stub
if (arg2) {
checkedItems[arg1] = true
} else {
checkedItems[arg1] = false
Toast.makeText(this@MainActivity, "您取消了" + items[arg1], Toast.LENGTH_SHORT).show()
}
}
builder.setNegativeButton("取消", object : DialogInterface.OnClickListener {
override fun onClick(arg0: DialogInterface, arg1: Int) {
// TODO Auto-generated method stub
arg0.dismiss()
}
})
builder.setPositiveButton("确定", object : DialogInterface.OnClickListener {
override fun onClick(arg0: DialogInterface?, arg1: Int) {
// TODO Auto-generated method stub
var str = ""
for (i in checkedItems.indices) {
if (checkedItems[i]) {
str = str + items[i]
}
}
Toast.makeText(this@MainActivity, "您选择了$str", Toast.LENGTH_SHORT).show()
}
})
builder.create().show()
}
自定义对话框
private fun layDialog() {
val builder: AlertDialog.Builder = AlertDialog.Builder(this@MainActivity)
// 创建一个view,并且将布局加入view中
val view: View = LayoutInflater.from(this@MainActivity).inflate(
R.layout.dialog_edt, null, false)
// 将view添加到builder中
builder.setView(view)
// 创建dialog
val dialog = builder.create()
// 初始化控件,注意这里是通过view.findViewById
val edt = view.findViewById<EditText>(R.id.edt)
val confirm = view.findViewById<Button>(R.id.confirm)
val cancel = view.findViewById<Button>(R.id.cancel)
// 设置button的点击事件及获取editview中的文本内容
confirm.setOnClickListener(View.OnClickListener { // TODO Auto-generated method stub
val str = if (edt.text == null) "" else edt.text
.toString()
Toast.makeText(this,str, Toast.LENGTH_SHORT).show()
})
// 取消按钮
cancel.setOnClickListener(View.OnClickListener { // TODO Auto-generated method stub
dialog.dismiss()
})
dialog.show()
}
<?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"
android:orientation="vertical">
<EditText
android:id="@+id/edt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"></EditText>
<Button
android:id="@+id/cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="取消"
app:layout_constraintEnd_toStartOf="@+id/guideline"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/edt" />
<Button
android:id="@+id/confirm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="确认"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/cancel"
app:layout_constraintTop_toBottomOf="@+id/edt" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
</androidx.constraintlayout.widget.ConstraintLayout>
自定义进度条对话框:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun danxuan(view: View) {
progressDialog()
}
private fun progressDialog(){
val dialogFragment = ProgressFragmentDialog()
dialogFragment.show(supportFragmentManager, "progress")
}
}
class ProgressFragmentDialog : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return super.onCreateDialog(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
dialog!!.requestWindowFeature(Window.FEATURE_NO_TITLE) //去掉Dialog的标题部分
dialog!!.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) //dialog背景色变为透明
//点击区域外弹窗不消失
dialog!!.setCanceledOnTouchOutside(false);
val view = inflater.inflate(R.layout.dialog_edt, null)
val cancle = view.findViewById<Button>(R.id.cancle)
cancle.setOnClickListener {
dialog!!.dismiss()
}
return view
}
}
<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"
android:gravity = "center"
android:orientation="vertical">
<Button
android:id="@+id/cancle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.525"></Button>
<ProgressBar
android:id="@+id/progressbar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="300dp"
android:layout_height="3dp"
android:layout_marginBottom="56dp"
android:max="300"
android:progress="100"
app:layout_constraintBottom_toTopOf="@+id/cancle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.486"
app:layout_constraintStart_toStartOf="parent"></ProgressBar>
</androidx.constraintlayout.widget.ConstraintLayout>