Android笔记(二十七):自定义Dialog实现居中Toast

背景

记录实现符合项目需求的Toast弹窗

具体实现

kotlin 复制代码
class MyTipDialog private constructor(val context: Activity): Dialog(context, R.style.MyTipTheme) {

    val resId = ObservableField(0)
    private val mainHandler = Handler(Looper.getMainLooper())
    init {
        setCanceledOnTouchOutside(true)
        setCancelable(true)
        window?.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)
        window?.setBackgroundDrawableResource(Color.parseColor("#00000000"))
        window?.setWindowAnimations(R.style.myTipDialogAnim)
        val binding = DataBindingUtil.inflate<MyTipsBinding>(layoutInflater, R.layout.my_tips, null, false)
        binding.viewModel = this
        setContentView(binding.root)
    }

    companion object{
        private var instance: MyTipDialog ? = null
        fun getInstance(context: Activity, resId: Int): MyTipDialog {
            if (instance == null){
                instance = MyTipDialog (context)
            }
            instance?.dismiss()
            instance?.resId?.set(resId)
            return instance!!
        }
    }

    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        context.dispatchTouchEvent(ev)
        return super.dispatchTouchEvent(ev)
    }

    override fun show() {
        super.show()
        mainHandler.postDelayed({
            dismiss()
        }, 2000)
    }

    override fun dismiss() {
        super.dismiss()
        mainHandler.removeCallbacksAndMessages(null)
    }
}

自定义布局:R.layout.my_tips

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="viewModel"
            type="com.masked_boy.test.MyTipsDialog" />
    </data>

    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:maxWidth="304dp"
            android:paddingHorizontal="20dp"
            android:paddingVertical="5dp"
            android:layout_gravity="center"
            android:text="@{context.getString(viewModel.resId)}"
            android:textSize="11sp"
            android:textColor="#FFFFFFFF"
            android:background="#000000"/>
    </FrameLayout>
</layout>

对话框style

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
    <style name="MyTipTheme" parent="AppTheme">
        <item name="android:windowFullscreen">false</item>
        <item name="android:windowLightStatusBar" tools:targetApi="m">true</item>
    </style>
    <style name="myTipDialogAnim" mce_bogus="1" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/my_tip_dialog_enter_anim</item>
        <item name="android:windowExitAnimation">@anim/my_tip_dialog_exit_anim</item>
    </style>
</resources>

对话框show动画R.anim.my_tip_dialog_enter_anim

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="200"
    android:interpolator="@android:anim/decelerate_interpolator">
    <alpha
        android:fromAlpha="0"
        android:toAlpha="1" />
</set>

对话框dismiss动画R.anim.my_tip_dialog_exit_anim

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="200"
    android:interpolator="@android:anim/decelerate_interpolator">
    <alpha
        android:fromAlpha="1"
        android:toAlpha="0" />
</set>
相关推荐
半桔30 分钟前
【Linux手册】从接口到管理:Linux文件系统的核心操作指南
android·java·linux·开发语言·面试·系统架构
xiaopengbc1 小时前
Android解压工具,ZArchiver,RAR for Android,iZip,The Unarchiver,解压专家
android
笑衬人心。1 小时前
Java 17 新特性笔记
java·开发语言·笔记
Digitally1 小时前
5种使用USB数据线将文件从安卓设备传输到电脑的方法
android
序属秋秋秋2 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
quant_19864 小时前
R语言如何接入实时行情接口
开发语言·经验分享·笔记·python·websocket·金融·r语言
宝山哥哥9 小时前
网络信息安全学习笔记1----------网络信息安全概述
网络·笔记·学习·安全·网络安全
爬虫程序猿9 小时前
利用爬虫按关键字搜索淘宝商品实战指南
android·爬虫
顾北川_野9 小时前
Android ttyS2无法打开该如何配置 + ttyS0和ttyS1可以
android·fpga开发
逼子格10 小时前
逻辑门电路Multisim电路仿真汇总——硬件工程师笔记
笔记·硬件工程师·multisim·电路仿真·逻辑门·硬件工程师学习·电路图