kotlin自定义弹框dialog

本文分享了一种使用Kotlin编写的自定义Dialog的实现方法,特点包括自定义样式、无标题栏,并且提供了Dialog关闭监听。项目已通过测试,可运行。文章附带了效果图和源码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

核心代码我贴出来了:其他一些颜色图片资源,都在源码里面,需要的朋友请自行下载运行,这个程序是已经测试过的,亲测可运行

项目特色: 1.diallog是自定义的

2.是用kotlin代码写的 也比较常用

3.自带dialog dismiss监听 ,可以知道结束弹框  做了什么

4.去除了标题栏 

效果图:

 

源码地址:https://github.com/wrs13634194612/KotlinDialog

主界面:

package com.example.admin.zkotlin


import android.app.Activity
import android.graphics.drawable.AnimationDrawable
import android.os.Bundle
import android.os.Handler
import android.util.Log
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import org.json.JSONObject
import android.content.DialogInterface
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_staff_detail.*


class  MainActivity : BaseActivity() ,View.OnClickListener {
    override fun initViews() {
    }

    override fun initEvents() {
    }

    lateinit var ICCardDialog: AutoHideBottomUIDialog
    private val dialogHeight = 460f
    lateinit var ivRFIDAnim: ImageView
    lateinit var tvRecordRFIDResult: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_staff_detail)
        initICCardDialog()

        tvBindRFID.setOnClickListener(this)
    }

    private fun initICCardDialog() {
        ICCardDialog = AutoHideBottomUIDialog(this)
        ICCardDialog.setContentView(R.layout.dialog_entry_ic_card)
        ICCardDialog.setDialogHeight(dialogHeight)
        ivRFIDAnim = ICCardDialog.findViewById(R.id.ivAnim)
        tvRecordRFIDResult = ICCardDialog.findViewById(R.id.tvRecordResult)


        ICCardDialog.setOnDismissListener(DialogInterface.OnDismissListener { dialog ->
            Log.i("TAG", "cancel  ICCardDialog dismiss")
        })

    }


    override fun onClick(v: View) {
        when (v.id) {
            R.id.tvBindRFID -> {
                tvRecordRFIDResult.text = "等待录入···"
                ICCardDialog.show()
            }

        }
    }

    override fun onDestroy() {
        super.onDestroy()
        if (ICCardDialog.isShowing) {
            ICCardDialog.dismiss()
        }

    }
}

2.自定义的dialog

package com.example.admin.zkotlin


import android.app.Dialog
import android.content.Context
import android.view.Gravity
import android.view.View
import android.view.WindowManager

class AutoHideBottomUIDialog : Dialog {

    var mContext: Context

    constructor(context: Context) : super(context) { this.mContext = context}
    private var height = 0f

    override fun onStart() {
        super.onStart()
        window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
        window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
    }

    override fun show() {
        this.window.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
        this.window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
        var window = this.window
        if(height == 0f){
            window.attributes.height = DisplayUtil.dip2px(mContext, 440f)
        }else {
            window.attributes.height = DisplayUtil.dip2px(mContext, height)
        }
        window.attributes.width = DisplayUtil.dip2px(mContext, 300f)
        window.setBackgroundDrawable(mContext.resources.getDrawable(R.color.color_transparent))
        window.setGravity(Gravity.CENTER)
        super.show()
    }

    fun setDialogHeight(width : Float) : AutoHideBottomUIDialog {
        this.height = width
        return this
    }

}

自定义弹框的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg_dialog"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:background="@drawable/bg_dialog_title"
        android:text="IC录入"
        android:textColor="@color/white"
        android:textSize="20dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="90dp"
        android:layout_height="wrap_content"
        android:text="提示:请将IC卡放在下方感应区域"
        android:textSize="14dp"
        android:textColor="@color/color_text3"/>

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:scaleType="fitXY"
        android:src="@drawable/pic1"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="133dp"/>

    <ImageView
        android:id="@+id/ivAnim"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="181dp"
        android:src="@mipmap/ic_launcher"
        android:layout_gravity="center_horizontal"/>

    <TextView
        android:id="@+id/tvRecordResult"
        android:layout_width="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
        android:layout_height="wrap_content"
        android:text="等待录入···"
        android:textColor="@color/colorAccent"
        android:textSize="14dp"/>
</LinearLayout>

end

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值