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


相关推荐: phpredis提高消息队列的实时性方法(推荐)  原生JS获取元素集合的子元素宽度实例  php json中文编码为null的解决办法  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  JavaScript Ajax实现异步通信  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  HTML 中动态设置元素 name 属性的正确语法详解  Laravel如何自定义分页视图?(Pagination示例)  如何在IIS管理器中快速创建并配置网站?  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Android仿QQ列表左滑删除操作  历史网站制作软件,华为如何找回被删除的网站?  Laravel观察者模式如何使用_Laravel Model Observer配置  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  黑客如何通过漏洞一步步攻陷网站服务器?  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  JS弹性运动实现方法分析  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  如何在IIS中配置站点IP、端口及主机头?  详解MySQL数据库的安装与密码配置  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何快速搭建FTP站点实现文件共享?  非常酷的网站设计制作软件,酷培ai教育官方网站?  晋江文学城电脑版官网 晋江文学城网页版直接进入  Linux安全能力提升路径_长期防护思维说明【指导】  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  详解CentOS6.5 安装 MySQL5.1.71的方法  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  怎样使用JSON进行数据交换_它有什么限制  EditPlus中的正则表达式实战(5)  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel DB事务怎么使用_Laravel数据库事务回滚操作