当前位置: 首页 > news >正文

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

背景

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

具体实现

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 = thissetContentView(binding.root)}companion object{private var instance: MyTipDialog ? = nullfun 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 version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><data><variablename="viewModel"type="com.masked_boy.test.MyTipsDialog" /></data><FrameLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"><TextViewandroid: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 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 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"><alphaandroid:fromAlpha="0"android:toAlpha="1" />
</set>

对话框dismiss动画R.anim.my_tip_dialog_exit_anim

<?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"><alphaandroid:fromAlpha="1"android:toAlpha="0" />
</set>
http://www.lryc.cn/news/136905.html

相关文章:

  • css实现文字的渐变,适合大屏
  • 软考高级系统架构设计师系列论文八十七:论企业应用集成
  • C++设计模式之适配器模式
  • 山西电力市场日前价格预测【2023-08-24】
  • 一文速学-让神经网络不再神秘,一天速学神经网络基础(一)
  • 百度Q2财报:营收341亿元实现加速增长,净利润高速增长44%,增长强劲全线重构
  • ARM DIY(二)配置晶振频率
  • 高等数学:线性代数-第三章
  • 深入理解 SQL 注入攻击原理与防御措施
  • QT5.12.12通过ODBC连接到GBase 8s数据库(CentOS)
  • 爱校对发布全新PDF校对工具,为用户带来更为便捷的校正体验
  • 记录protocol buffers Mac安装
  • 基于Jenkins自动打包并部署docker、PHP环境,ansible部署-------从小白到大神之路之学习运维第86天
  • 【附安装包】Midas Civil2019安装教程
  • Apache StreamPark系列教程第一篇——安装和体验
  • mysql replace insert update delete
  • 实现SSM简易商城项目的商品查询功能
  • 视频批量剪辑矩阵分发系统源码开源分享----基于PHP语言
  • 亚信科技AntDB数据库通过GB 18030-2022最高实现级别认证,荣膺首批通过该认证的产品之列
  • 第11章 优化多线程应用程序
  • 分布式下的session共享问题
  • webrtc的Sdp中的Plan-b和UnifiedPlan
  • LLM-Rec:基于提示大语言模型的个性化推荐
  • microsoft -en - us 无法卸载
  • day43参与通信的服务器
  • K8S如何部署ZooKeeper以及如何进行ZooKeeper的平滑替换
  • Leetcode刷题之1658. 将 x 减到 0 的最小操作数
  • 海外网红营销中的创新技术与趋势:AI、AR和VR的应用探索
  • Vant 4.6.4发布,增加了一些新功能,并修复了一些bug
  • Linux权限维持—Strace监控Alias别名Cron定时任务