Android实现发送短信验证码倒计时功能示例

发布时间 - 2026-01-11 00:16:34    点击率:

一、简介:

开发中在用户注册或找回密码之类的功能,经常会遇到获取短信验证码,获取验证码后需要等待1分钟倒计时,这段时间是不能再次发送短信请求的。

效果图:


二、实现步骤:

1、一个关键类:CountDownTimer(Android系统自带的倒计时功能类)

public class CountDownTimerUtils extends CountDownTimer {

  private TextView mTextView; //显示倒计时的文字

  /**
   * @param textView     The TextView
   * @param millisInFuture   millisInFuture 从开始调用start()到倒计时完成
   *              并onFinish()方法被调用的毫秒数。(译者注:倒计时时间,单位毫秒)
   * @param countDownInterval 接收onTick(long)回调的间隔时间。(译者注:单位毫秒)
   */
  public CountDownTimerUtils(TextView textView, long millisInFuture, long countDownInterval) {
    super(millisInFuture, countDownInterval);
    this.mTextView = textView;
  }

  @Override
  public void onTick(long millisUntilFinished) {
    mTextView.setClickable(false); //设置不可点击
    mTextView.setText(millisUntilFinished / 1000 + "秒后可重新发送"); //设置倒计时时间
    mTextView.setBackgroundResource(R.drawable.validate_code_press_bg); //设置按钮为灰色,这时是不能点击的

    /**
     * 超链接 URLSpan
     * 文字背景颜色 BackgroundColorSpan
     * 文字颜色 ForegroundColorSpan
     * 字体大小 AbsoluteSizeSpan
     * 粗体、斜体 StyleSpan
     * 删除线 StrikethroughSpan
     * 下划线 UnderlineSpan
     * 图片 ImageSpan
     */
    SpannableString spannableString = new SpannableString(mTextView.getText().toString()); //获取按钮上的文字
    ForegroundColorSpan span = new ForegroundColorSpan(Color.RED);
    /**
     * public void setSpan(Object what, int start, int end, int flags) {
     * 主要是start跟end,start是起始位置,无论中英文,都算一个。
     * 从0开始计算起。end是结束位置,所以处理的文字,包含开始位置,但不包含结束位置。
     */
    spannableString.setSpan(span, 0, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);//将倒计时的时间设置为红色
    mTextView.setText(spannableString);
  }

  @Override
  public void onFinish() {
    mTextView.setText("重新获取验证码");
    mTextView.setClickable(true);//重新获得点击
    mTextView.setBackgroundResource(R.drawable.validate_code_normal_bg); //还原背景色
  }
}

2、在合适的地方调用

使用:

CountDownTimerUtils mCountDownTimerUtils = new CountDownTimerUtils(mButton, 60000, 1000); //倒计时1分钟
mCountDownTimerUtils.start();

3、validate_code_press_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <!--发送短信验证码按钮被按下-->
  <solid android:color="#C0C0C0" /> <!--填充色 透明-->
  <corners android:radius="8dp" /> <!-- 圆角 -->
</shape>

validate_code_normal_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <!--发送短信验证码按钮未按下-->
  <solid android:color="#FF9933" /> <!--填充色 透明-->
  <corners android:radius="8dp" /> <!-- 圆角 -->
</shape>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# android验证码倒计时  # 获取验证码倒计时  # android获取验证码倒计时  # OpenHarmony实现类Android短信验证码及倒计时流程详解  # Android自定义短信倒计时view流程分析  # Android使用CountDownTimer模拟短信验证倒计时  # Android使用Kotlin和RxJava 2.×实现短信验证码倒计时效果  # Android 用RxBinding与RxJava2实现短信验证码倒计时功能  # Android​短信验证码倒计时验证的2种常用方式  # Android自定义Chronometer实现短信验证码秒表倒计时功能  # Android开发之获取短信验证码后按钮背景变化并且出现倒计时  # Android封装实现短信验证码的获取倒计时  # 倒计时  # 验证码  # 发送短信  # 按下  # 圆角  # 填充色  # 下划线  # 这段  # 但不  # 设置为  # 经常会  # 回调  # 用户注册  # 大家多多  # 算起  # 都算  # 粗体  # 背景色  # 主要是  # 找回密码 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  动图在线制作网站有哪些,滑动动图图集怎么做?  专业商城网站制作公司有哪些,pi商城官网是哪个?  如何在IIS服务器上快速部署高效网站?  html如何与html链接_实现多个HTML页面互相链接【互相】  如何在IIS管理器中快速创建并配置网站?  如何快速搭建高效香港服务器网站?  如何在建站之星绑定自定义域名?  Laravel如何实现API版本控制_Laravel版本化API设计方案  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  Laravel如何创建自定义Artisan命令?(代码示例)  Linux系统命令中screen命令详解  香港服务器选型指南:免备案配置与高效建站方案解析  Python图片处理进阶教程_Pillow滤镜与图像增强  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Laravel如何实现模型的全局作用域?(Global Scope示例)  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  如何彻底卸载建站之星软件?  音乐网站服务器如何优化API响应速度?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  历史网站制作软件,华为如何找回被删除的网站?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  如何解决hover在ie6中的兼容性问题  利用JavaScript实现拖拽改变元素大小  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  如何用PHP快速搭建高效网站?分步指南  Thinkphp 中 distinct 的用法解析  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  如何快速生成橙子建站落地页链接?  JavaScript实现Fly Bird小游戏  Laravel怎么判断请求类型_Laravel Request isMethod用法  如何用PHP工具快速搭建高效网站?  网站制作企业,网站的banner和导航栏是指什么?  Angular 表单中正确绑定输入值以确保提交与验证正常工作  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  EditPlus中的正则表达式实战(5)  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Laravel如何生成URL和重定向?(路由助手函数)  如何快速重置建站主机并恢复默认配置?  如何在万网ECS上快速搭建专属网站?  Laravel如何使用withoutEvents方法临时禁用模型事件  JS中对数组元素进行增删改移的方法总结  PythonWeb开发入门教程_Flask快速构建Web应用  想要更高端的建设网站,这些原则一定要坚持!  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  如何用免费手机建站系统零基础打造专业网站?