[Day16] Andoroid - Kotlin笔记: CustomDialog

制作一个客制化的dialog

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 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:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_margin="26dp"
    app:cardBackgroundColor="@android:color/white"
    app:cardCornerRadius="10dp"
    app:cardElevation="0dp"
    tools:context="com.example.CustomAlertDialog">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:gravity="center"
        android:minWidth="300dp"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:minHeight="36dp"
            android:textColor="@color/gray4"
            android:textSize="16sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="标题" />

        <ScrollView
            android:id="@+id/sv_block_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toTopOf="@id/block_bottom_bar"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHeight_max="460dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/tv_title"
            app:layout_constraintWidth_min="300dp">

            <TextView
                android:id="@+id/tv_message"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="8dp"
                android:minHeight="40dp"
                android:gravity="center_horizontal"
                android:textColor="@color/gray6"
                android:textSize="textSize14sp"
                tools:text="讯息" />

        </ScrollView>

        <LinearLayout
            android:id="@+id/block_bottom_bar"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="horizontal"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent">

            <Button
                android:id="@+id/btn_negative"
                style="?android:attr/borderlessButtonStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:minWidth="135dp"
                android:minHeight="36dp"
                android:text="@string/btn_cancel"
                android:textColor="@color/blue5"
                android:textSize="@dimen/textSize14sp" />

            <Button
                android:id="@+id/btn_positive"
                style="?android:attr/borderlessButtonStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:minWidth="135dp"
                android:minHeight="36dp"
                android:text="@string/btn_determine"
                android:textColor="@color/blue5"
                android:textSize="@dimen/textSize14sp" />

        </LinearLayout>

    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.cardview.widget.CardView>
class CustomAlertDialog(context: Context) : AlertDialog(context) {

    private var mTitle: String? = null
    private var mMessage: String? = null
    private var mSpannedMessage: Spanned? = null
    private var mPositiveText: String? = context.getString(R.string.btn_determine)
    private var mNegativeText: String? = context.getString(R.string.btn_cancel)
    private var mPositiveClickListener: View.OnClickListener = View.OnClickListener { dismiss() }
    private var mNegativeClickListener: View.OnClickListener = View.OnClickListener { dismiss() }
    private var mGravity = Gravity.CENTER

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dialog_custom_alert)
        window?.setBackgroundDrawableResource(android.R.color.transparent)
        initView()
    }

    private fun initView() {
        when (mTitle) {
            null -> tv_title.visibility = View.GONE
            else -> tv_title.text = mTitle
        }

        tv_message.gravity = mGravity
        when {
            mSpannedMessage != null -> tv_message.text = mSpannedMessage
            mMessage == null -> sv_block_content.visibility = View.GONE
            else -> tv_message.text = mMessage
        }

        if (mPositiveText == null) {
            btn_positive.visibility = View.GONE
        } else
            btn_positive.text = mPositiveText

        if (mNegativeText == null) {
            btn_negative.visibility = View.GONE
        } else
            btn_negative.text = mNegativeText

        btn_positive.setOnClickListener(mPositiveClickListener)
        btn_negative.setOnClickListener(mNegativeClickListener)
    }


    ////
    //以下设定要在 dialog.show() 之前才有效果
    ////
    fun setTitle(title: String?) {
        mTitle = title
    }

    fun setMessage(message: String?) {
        mMessage = message
    }

    //set .html 语法文字
    fun setMessage(spanned: Spanned) {
        mSpannedMessage = spanned
    }

    fun setGravity(gravity: Int) {
        mGravity = gravity
    }

    /**
     * @param positiveText: Positive 按钮文字,若给 null 则隐藏按钮
     */
    fun setPositiveButtonText(positiveText: String?) {
        mPositiveText = positiveText
    }

    /**
     * @param negativeText: Negative 按钮文字,若给 null 则隐藏按钮
     */
    fun setNegativeButtonText(negativeText: String?) {
        mNegativeText = negativeText
    }

    fun setPositiveClickListener(positiveClickListener: View.OnClickListener) {
        mPositiveClickListener = positiveClickListener
    }

    fun setNegativeClickListener(negativeClickListener: View.OnClickListener) {
        mNegativeClickListener = negativeClickListener
    }
}

<<:  使用 Template Message 替 Line Bot 加上同意条款的功能(2)

>>:  [04] 认识服务器网址和请求

#3 Python教学2

基本运算子 最最基本的运算子-赋值运算子 「=」 是最基本的运算子,它的作用是将 「=」 右方的数值...

Day 12 - UML — 系统设计不可不知的 UML

今天再度要进入新的篇章啦!!! 身为软件工程师,想要设计出好的系统架构,或是综观地去理解系统的话,...

[第二十只羊] 迷雾森林舞会XIV 进房间聊天 hotwire + stimulus 起步走

天亮了 昨晚是平安夜 关於迷雾森林故事 习惯 洛神:2号玩家请继续发言 5号:我其实第一轮第二轮都觉...

[day-25] Python-例外处理!

甚麽是例外处理? 当Python在执行的时候,如果遇到无法处理的状况就会出现错误,导致整个程序卡住。...

【Day3】声音的特徵提取

梅尔倒频谱 昨天我们介绍了频谱跟梅尔频率,那有没有机会我可以把这两个结合在一起,获得更有用的资讯呢?...