美文网首页
自定义Dialog

自定义Dialog

作者: Method | 来源:发表于2021-05-20 23:59 被阅读0次

自定义Dialog类

class BackDialog(context: Context) : AlertDialog(context, R.style.MDialog) {
    private var sureListener: (() -> Unit)? = null
    private var cancelListener: (() -> Unit)? = null

    init {
        /*加载自定义布局*/
        val view = LayoutInflater.from(context).inflate(R.layout.layout_back_dialog, null, false)
        val mSure = view.findViewById<Button>(R.id.mSure)
        val mCancel = view.findViewById<Button>(R.id.mCancel)
        setView(view)
        /*设置监听事件*/
        mSure.setOnClickListener {
            if (sureListener == null) {
                dismiss()
                if(context is Activity){
                    context.finish()
                }
            }
            sureListener?.invoke()
        }

        mCancel.setOnClickListener {
            if (cancelListener == null) {
                dismiss()
            }
            cancelListener?.invoke()
        }
    }

    /*设置监听事件*/
    fun setClickListener(sureListener: () -> Unit, cancelListener: () -> Unit) {
        this.sureListener = sureListener
        this.cancelListener = cancelListener
    }
    /*
    *  window属性需要放在show后边
    */
    override fun show() {
        super.show()
        /*设置进出动画*/
        window?.setWindowAnimations(R.style.backDialog)
        /*窗口居中*/
        window?.setGravity(Gravity.CENTER)
        /*添加Flag*/
        window?.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
        /*获取window宽高*/
        val d = window?.windowManager?.defaultDisplay
        val height = d?.height
        val width = d?.width
        /*自定义宽高*/
        val a = window?.attributes
        a?.width = (width!!*0.75).toInt()
        a?.height = (width*0.65).toInt()
        window?.attributes = a
    }

}

样式

<style name="MDialog" >
        <item name="android:windowBackground">@android:color/transparent</item>
        <!--//设置dialog的背景,此处为系统给定的透明值 -->
        <item name="android:windowFrame">@null</item>
        <!--//Dialog的windowFrame框为无 -->
        <item name="android:windowNoTitle">true</item>        
        <!--//是否显示标题-->
        <item name="android:windowIsFloating">true</item>
        <!--//是否浮现在activity之上 -->
        <item name="android:windowIsTranslucent">false</item>
        <!--//是否半透明 -->
        <item name="android:windowContentOverlay">@null</item>
        <!--//是否有覆盖 -->
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <!--//设置Activity出现方式 -->
        <item name="android:backgroundDimEnabled">false</item>
        <!--//背景是否模糊显示 -->
    </style>

布局

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="#ffffff"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/mTip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="@string/tip_text"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/mContent"
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:gravity="center"
        android:text="@string/finsh_app_text"
        app:layout_constraintBottom_toTopOf="@+id/view"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/mTip" />

    <View
        android:id="@+id/view"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/purple_200"
        app:layout_constraintBottom_toTopOf="@+id/mCancel"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/mSure"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="@string/sure_text"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/mCancel"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/mCancel"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="@string/cancel_text"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/mSure" />
</androidx.constraintlayout.widget.ConstraintLayout>

window动画

 <style name="backDialog" >
        <item name="android:windowEnterAnimation">@anim/dialog_enter</item>
        <item name="android:windowExitAnimation">@anim/dialog_exit</item>
    </style>
    

enter

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="200">
    <translate android:fromYDelta="-100%"
        />
</set>

exit

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="200">
    <translate android:fromYDelta="0"
        android:toYDelta="100%"/>
</set>
dialog.gif

相关文章

  • Dialog

    安卓dialog的使用+如何自定义dialog自定义Dialog自定义Dialog 自定义

  • 自定义Dialog

    自定义Dialog的主题 自定义Dialog的布局文件 继承Dialog 并在onCreate方法中将布局设置给D...

  • 实现图片Dialog中带ViewPager

    效果图 实现思路 自定义Dialog,为Dialog添加自定义布局,自定义PagerAdapter以及PageTr...

  • 【Android】自定义全屏dialog

    一、在themes.xml中添加自定义dialog的样式 二、创建dialog基类 三、创建自定义dialog的布...

  • Android圆角对话框Dialog

    需求:模仿iOS样式Dialog对话框。 自定义Dialog 核心代码: Dialog样式: Dialog布局文件...

  • Android自定义Dialog及其点击事件

    在项目开发中,经常要用到dialog。但是系统的dialog太丑,所有我们要自定义dialog。下面的先介绍自定义...

  • 一个漂亮的自定义Dialog

    这是一个自定义的dialog项目 自定义的dialog,具有如下特点 圆角的dialog View 圆形图片的ti...

  • Flutter Dialog 动画

    本文对 Dialog 做一次系统性学习记录,包括系统 Dialog,自定义 Dialog,Dialog 动画。 A...

  • 自定义Dialog

    仿IOS自定义的Dialog: 1、Util帮助类创建dialog 2、布局文件 :loading_dialog....

  • 自定义Dialog实现透明无遮罩进度框

    效果图: 自定义Dialog继承自Dialog params.dimAmount=0:设置dialog弹出后,背景...

网友评论

      本文标题:自定义Dialog

      本文链接:https://www.haomeiwen.com/subject/lezgjltx.html