Kotlin自定义dialog
由于系统自带的dialog都比较的简单,无法满足产品的需要,而且也不够美观,所以能自定义随心所欲的dialog岂不是美滋滋。
步骤如下
1.写好自定义的dialog_exit.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@drawable/dialog_style_bg"
android:layout_height="wrap_content"
>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="56dp"
android:layout_centerHorizontal="true"
android:id="@+id/exitrela"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/exit_text"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:id="@+id/exitexit"
android:textSize="20sp"
android:textColor="#00a0e9"
/>
<ImageView
android:layout_width="32dp"
android:layout_height="32dp"
android:id="@+id/negetiveimgexit"
android:src="@mipmap/negetive"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="16dp"
android:layout_marginTop="16dp"
/>
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#1a00a0e9"
android:layout_below="@id/exitrela"
/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_below="@id/exitrela"
android:id="@+id/doubletext"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ignorerel"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tx1"
android:text="@string/exit_ask_text"
android:textColor="#00a0e9"
android:textSize="14sp"
android:layout_centerHorizontal="true"
/>
</RelativeLayout>
</RelativeLayout>
<RelativeLayout
android:layout_below="@id/doubletext"
android:layout_width="match_parent"
android:layout_height="56dp"
>
<Button
android:layout_width="192dp"
android:layout_height="41dp"
android:id="@+id/positivebtexit"
android:text="@string/exit_text"
android:stateListAnimator="@null"
android:textSize="20sp"
android:textColor="@color/textHightlight"
android:layout_centerHorizontal="true"
android:background="@drawable/shape"
android:layout_centerVertical="true"
/>
</RelativeLayout>
</RelativeLayout>
2定义继承dialog的ExitDiaolg类
package com.example.remoteapp2.dialog
import android.app.Dialog
import android.content.Context
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import com.example.remoteapp2.R
import kotlinx.android.synthetic.main.dialog_exit.*
class ExitDiaolg : Dialog{
constructor(context: Context) : this(context,0)
constructor(context: Context, themeResId: Int) : super(context,R.style.dialog){
setContentView(R.layout.dialog_exit)
window.setGravity(Gravity.CENTER)
window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT)
}
public fun setOnclickListener(listener: View.OnClickListener){
if (positivebtexit !== null){
positivebtexit.setOnClickListener(listener)
}
if (negetiveimgexit !== null){
negetiveimgexit.setOnClickListener(listener)
}
}
}
R.style.dialog内容如下:
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:backgroundDimAmount">0.6</item>
</style>
3调用:
(1)在所在活动中
private val edialog:ExitDiaolg by lazy {
ExitDiaolg(this)
}
fun showExit(){
edialog.show()
edialog.setOnclickListener(object :View.OnClickListener{
override fun onClick(v: View) {
if(v.id == R.id.negetiveimgexit){
edialog.dismiss()
}
if (v.id == R.id.positivebtexit){
finish()
}
}
})
}
override fun onBackPressed() {
showExit()
}
效果: