KOTLIN 继承DAILOG接口写一个自定的DAILOG,配合XML
时间: 2023-06-24 10:06:44 浏览: 55
好的,下面是一个简单的示例:
首先,创建一个继承自Dialog类的Kotlin类,例如CustomDialog,然后实现Dialog中的方法:
```kotlin
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.View
import android.view.Window
import kotlinx.android.synthetic.main.custom_dialog.*
class CustomDialog(context: Context) : Dialog(context), View.OnClickListener {
private var listener: OnCustomDialogListener? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(R.layout.custom_dialog)
btn_confirm.setOnClickListener(this)
btn_cancel.setOnClickListener(this)
}
override fun onClick(v: View) {
when (v.id) {
R.id.btn_confirm -> {
listener?.onConfirm()
dismiss()
}
R.id.btn_cancel -> {
listener?.onCancel()
dismiss()
}
}
}
fun setOnCustomDialogListener(listener: OnCustomDialogListener) {
this.listener = listener
}
interface OnCustomDialogListener {
fun onConfirm()
fun onCancel()
}
}
```
在这个类中,我们定义了一个OnCustomDialogListener接口,该接口有两个方法onConfirm和onCancel,分别对应确认和取消按钮的点击事件。我们还在onCreate方法中设置了dialog的布局文件,并为确认和取消按钮设置了点击事件。
接下来,在res/layout目录下创建custom_dialog.xml文件,定义dialog的布局,例如:
```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<TextView
android:id="@+id/tv_title"
android:text="这是一个自定义Dialog"
android:textSize="20sp"
android:textColor="@android:color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"/>
<View
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
<TextView
android:id="@+id/tv_message"
android:text="这是一个自定义Dialog的消息"
android:textSize="16sp"
android:textColor="@android:color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<Button
android:id="@+id/btn_cancel"
android:text="取消"
android:textColor="@android:color/white"
android:background="@drawable/bg_btn_cancel"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn_confirm"
android:text="确认"
android:textColor="@android:color/white"
android:background="@drawable/bg_btn_confirm"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
```
在这个布局文件中,我们定义了一个包含标题、消息和确认取消按钮的LinearLayout,并为确认和取消按钮设置了样式和点击事件。
最后,在Activity或Fragment中使用CustomDialog:
```kotlin
val dialog = CustomDialog(this)
dialog.tv_title.text = "提示"
dialog.tv_message.text = "这是一个自定义Dialog"
dialog.setOnCustomDialogListener(object : CustomDialog.OnCustomDialogListener {
override fun onConfirm() {
// 点击确认按钮的逻辑
}
override fun onCancel() {
// 点击取消按钮的逻辑
}
})
dialog.show()
```
在这个示例中,我们首先创建了一个CustomDialog实例,并设置了标题、消息和点击事件。然后,我们使用setOnCustomDialogListener方法设置了OnCustomDialogListener接口,当用户点击确认或取消按钮时,CustomDialog会回调相应的方法。最后,我们调用show方法显示dialog。
至此,一个简单的自定义Dialog就完成了。当然,你可以根据自己的需求修改CustomDialog的样式和逻辑。