Kotlin自定义dialog

本文详细介绍如何使用Kotlin自定义对话框,包括创建XML布局文件、定义对话框类及样式,并展示了在活动中的调用示例。

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

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()
    }

效果:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值