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

网站建设的新发展简单大气的成品网站

网站建设的新发展,简单大气的成品网站,win系统的wordpress,短链接转换Android使用协程实现自定义Toast弹框 ​ 最近有个消息提示需要显示10s,刚开始使用协程写了一个shoowToast方法#xff0c;传入消息内容、显示时间和toast显示类型即可#xff0c;以为能满足需求#xff0c;结果测试说只有5s#xff0c;查看日志和源码发现Android系统中Toa…Android使用协程实现自定义Toast弹框 ​ 最近有个消息提示需要显示10s,刚开始使用协程写了一个shoowToast方法传入消息内容、显示时间和toast显示类型即可以为能满足需求结果测试说只有5s查看日志和源码发现Android系统中Toast显示有2种类型Toast.LENGTH_SHORT和Toast.LENGTH_LONG分别代表Toast消息显示的时间为短暂大约2秒和长时间大约3.5秒这和我们所需要的还是有很大差距的于是通过自定义WindowManager协程方式实现了此需求. 1.showToast方法如下 object ToastUtils {private var toastJob :Job ? nullfun Context.showToast(message: String, duration: Int Toast.LENGTH_SHORT, delayTime: Long 2000L) {val toast Toast.makeText(thisshowToast, message, duration)toast.show()toastJob?.cancel()toastJob CoroutineScope(Dispatchers.Main).launch {delay(delayTime)toast.cancel()}} }2.使用示例 private fun initViews() {val textView findViewByIdTextView(R.id.tv_test)textView.setOnClickListener {mCountdownJob countDownCoroutines(10, lifecycleScope,onTick { second -textView.text buildString {append(second)append(s后重发)}}, onStart {// 倒计时开始}, onFinish {// 倒计时结束重置状态textView.text buildString {append(发送验证码)}})showToast(祝大家国庆节快乐万事如意,1,1000L * 10)}}3.实现的效果如下 可以看到虽然显示了Toast,但是5s就消失了设置显示时间和动态传入10s都是不行的。 4.自定义Toast弹框协程 使用协程实现 package com.cloud.customtoastdemo.toastimport android.content.Context import android.graphics.PixelFormat import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.WindowManager import android.widget.TextView import com.cloud.customtoastdemo.R import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.launch/*** auth: njb* date: 2024/10/13 16:56* desc: 描述*/ object EasyToast {private var easyToastView: View? nullprivate var windowManager: WindowManager? nullprivate var mToastJob:Job ? nullprivate val TAG EasyToast/**** param context 上下文* param message 提示内容消息* param duration 可动态设置在的显示时间* param gravity 显示位置 top、center、bottom*/fun showCustomToast(context: Context, message: String, duration: Int, gravity: Int) {windowManager context.getSystemService(Context.WINDOW_SERVICE) as WindowManagerval inflater context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflaterif (easyToastView null) {easyToastView inflater.inflate(R.layout.custom_easy_toast, null)val textView easyToastView?.findViewByIdTextView(R.id.tv_message)textView?.text message}val params WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.TYPE_APPLICATION,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,PixelFormat.TRANSLUCENT)params.gravity gravityparams.x 0params.y 0if (easyToastView?.parent null) {windowManager?.addView(easyToastView, params)}mToastJob?.cancel()mToastJob CoroutineScope(Dispatchers.Main).launch {delay(duration.toLong())Log.d(TAG, 时间到了结束弹框$duration)if (easyToastView ! null) {windowManager?.removeView(easyToastView)easyToastView null}}}fun cancelEasyToast() {if (easyToastView ! null) {windowManager?.removeView(easyToastView)easyToastView null}mToastJob?.cancel()} }5.自定义Toast弹框(Handler): 使用Handler实现: package com.cloud.customtoastdemo.toastimport android.content.Context import android.graphics.PixelFormat import android.os.Handler import android.os.Looper import android.view.LayoutInflater import android.view.View import android.view.WindowManager import android.widget.TextView import com.cloud.customtoastdemo.R/*** auth: njb* date: 2024/10/13 16:56* desc: 描述*/object EasyToast {private var toastView: View? nullprivate var easyToastView: View? nullprivate var windowManager: WindowManager? nullprivate val handler Handler(Looper.getMainLooper())private lateinit var runnable: Runnable/**** param context 上下文* param message 提示内容* param message 提示内容消息* param duration 显示时间* param gravity 显示位置* param gravity 显示位置 top、center、bottom*/fun showToast(context: Context, message: String, duration: Int, gravity: Int) {windowManager context.getSystemService(Context.WINDOW_SERVICE) as WindowManagerval inflater context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflaterif (toastView null) {toastView inflater.inflate(R.layout.custom_toast, null)val textView toastView?.findViewByIdTextView(R.id.tv_message)if (easyToastView null) {easyToastView inflater.inflate(R.layout.custom_toast, null)val textView easyToastView?.findViewByIdTextView(R.id.tv_message)textView?.text message}val params WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.TYPE_APPLICATION,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,PixelFormat.TRANSLUCENT)params.gravity gravityparams.x 0params.y 0if (toastView?.parent null) {windowManager?.addView(toastView, params)if (easyToastView?.parent null) {windowManager?.addView(easyToastView, params)}runnable Runnable {if (toastView ! null) {windowManager?.removeView(toastView)toastView nullif (easyToastView ! null) {windowManager?.removeView(easyToastView)easyToastView null}handler.removeCallbacks(runnable)}handler.postDelayed(runnable!!, duration.toLong())}fun cancelEasyToast() {runnable?.let {handler.removeCallbacks(it)}if (toastView ! null) {windowManager?.removeView(toastView)toastView nullif (easyToastView ! null) {windowManager?.removeView(easyToastView)easyToastView null}}}6.使用示例 package com.cloud.customtoastdemo import android.os.Bundle import android.util.Log import android.view.Gravity import android.widget.TextView import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.lifecycle.lifecycleScope import com.cloud.customtoastdemo.contants.Constants import com.cloud.customtoastdemo.toast.EasyToast import com.cloud.customtoastdemo.toast.ToastUtils.showToast import com.cloud.customtoastdemo.utils.CountDownUtils.countDownCoroutines import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.launch class MainActivity : AppCompatActivity() { private var mCountdownJob: Job? null private val TAG MainActivity override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)enableEdgeToEdge()setContentView(R.layout.activity_main)ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -val systemBars insets.getInsets(WindowInsetsCompat.Type.systemBars())v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)insets}initViews() }private fun initViews() {val textView findViewByIdTextView(R.id.tv_test)textView.setOnClickListener {mCountdownJob countDownCoroutines(10, lifecycleScope,onTick { second -Log.d(TAG, toast显示时间$second)textView.text buildString {append(second)append(s后重发)}}, onStart {// 倒计时开始}, onFinish {// 倒计时结束重置状态textView.text buildString {append(发送验证码)}})/* lifecycleScope.launch { delay(1000) showToast(“祝大家国庆节快乐万事如意”,1,1000L * 10) } */ EasyToast.showCustomToast(thisMainActivity,message buildString {append(祝大家国庆节快乐万事如意)},duration Constants.TOAST_SHOW_TIME,gravity Gravity.TOP)} }} 7.实现效果如下 8.日志打印 9.总结 从上面的截图可以看出基本上是满足要求的显示了10sToast提示才消失至于这个显示时间你可以根据自己的需求动态设置我这里也没有设置默认时长尝试过利用反射修改Toast的显示时间和协程delpay方式设置显示时间都没有生效所以采用WindowManager协程的方式当然使用Handlerdialog也可以今天的内容就到这里如何实现动态显示Toast时长打卡收工关机睡觉. 10.demo地址如下 https://gitee.com/jackning_admin/custom-toast-demo
http://www.dnsts.com.cn/news/3540.html

相关文章:

  • 网站后台发文章图片链接怎么做google谷歌搜索引擎入口
  • 建设小学瓯江小区网站濮阳市建设局网站
  • 昆明网站网站建设游戏平台搭建
  • 天空在线网站建设制作网页时采用的最基本的语言是
  • 网站代运营收费门户网站建设建议
  • 上海网站建设 美橙化妆品网站建设原因
  • 做网站会员推广哪个好固安做网站
  • 印刷报价网站源码遵化建行网站
  • 本地建设网站wordpress官网主题
  • jsp网站如何做seo用front page2003做网站的导航条
  • 商城网站里可以再放cms吗聚名网备案域名
  • 外包做网站需要多少钱建网站做外贸
  • 谷秋精品课程网站建设软件建网站那家好
  • 应用软件定制开发济南网站建设yigeseo
  • 医药企业网站建设要哪些备案如何编写一套网站模板
  • 浙江省建设厅举报网站济南医院网站建设服务公司
  • 网站域名打不开网站 建设ppt
  • 怎么做网站服务器吗安康做网站哪家好
  • 小型企业网站模板网站开发策略
  • 自动做网站溧水区住房和城乡建设厅网站
  • 小型的电商网站有哪些一键上传淘宝网站开发
  • 江西建设单位网站建立自己的网站平台须多少钱
  • 优惠券购物网站怎么做云浮疫控动态
  • 商务型网站app推广方案怎么写
  • 泰州 做网站wordpress 默认端口
  • 计算机网站开发要考什么证广西南宁发现一例
  • 北京建站哪家好微孝感网站建设
  • 专业h5网站建设教程如果在wordpress
  • 涵江网站建设公司的网站备案手续
  • 做网页和做网站网站掉排名