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

一、简介:

开发中在用户注册或找回密码之类的功能,经常会遇到获取短信验证码,获取验证码后需要等待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>

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

(0)

相关推荐

  • Android开发之获取短信验证码后按钮背景变化并且出现倒计时

    目前越来越多的app在注册或是进行对应操作时,要求获取短信验证码,在点击了获取短信验证码的按钮后,就是出现倒计时,比如倒计时120S,在倒计时期间内,按钮背景变化并且出现倒计时,当倒计时结束后,如果你没有获取到验证码,可以再次点击. 代码如下所示: VerCodeTimer mVerCodeTimer=(Button) findViewById(R.id.login_get_ver_code); private class VerCodeTimer extends CountDownTimer

  • Android 用RxBinding与RxJava2实现短信验证码倒计时功能

    场景:注册账号页面时,我们点击按钮发送验证码,在等待验证码时,界面会有倒计时提示,这此期间按钮不可点击.当倒计时结束时,按钮恢复. 实现与功能都不难,这次用 RxBinding,RxJava2 的方法去实现.并实现了手动.自动停止倒计时,防止多次点击. 功能动态图 要使用 RxBinding.RxJava2 先添加 Gradle 配置: compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxj

  • Android​短信验证码倒计时验证的2种常用方式

    前言 ​本文主要介绍的是短信验证码功能,这里总结了两种常用的方式,可以直接拿来使用. 看图 计时器 说明:这里的及时从10开始,是为了演示的时间不要等太长而修改的. 方法如下 1.第一种方式:Timer /** * Description:自定义Timer * <p> * Created by Mjj on 2016/12/4. */ public class TimeCount extends CountDownTimer { private Button button; //参数依次为总时

  • Android自定义Chronometer实现短信验证码秒表倒计时功能

    本文实例为大家分享了Chronometer实现倒计时功能,Android提供了实现按照秒计时的API,供大家参考,具体内容如下 一.自定义ChronometerView 继续自TextView 主要原理:先设置一个基准倒计时时间mBaseSeconds,内置handler 每隔1s发送一个空消息,mRemainSeconds--,同时刷新界面视图,回调给外部调用者,只到为零.外部调用者可通过start()/pause()/stop()来控制计时器的工作状态. 可以app中发送短信验证码的场景为例

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

    一.简介: 开发中在用户注册或找回密码之类的功能,经常会遇到获取短信验证码,获取验证码后需要等待1分钟倒计时,这段时间是不能再次发送短信请求的. 效果图: 二.实现步骤: 1.一个关键类:CountDownTimer(Android系统自带的倒计时功能类) public class CountDownTimerUtils extends CountDownTimer { private TextView mTextView; //显示倒计时的文字 /** * @param textView Th

  • JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)

    1.功能描述 当用户想要获取验证码时,就点击 免费获取验证码 ,然后开始倒计时,倒计时期间按钮文字为剩余时间x秒,且不可按状态,倒计时结束后,按钮更改为点击重新发送. 2.分析 必须用到定时器.按钮点击后,在定时器内做出判断.倒计时60秒,到0结束. 3.代码实现: 重点介绍:定时器在进行下一次倒计时之前,一定要清除一下,这样的话保证下一次定时器倒计时是正常的. <!DOCTYPE html> <html> <head> <meta charset="U

  • swift 3.0 实现短信验证码倒计时功能

    下面一段代码给大家分享swift 3.0 实现短信验证码倒计时功能,具体实例代码如下所示: class TCCountDown { private var countdownTimer: Timer? var codeBtn = UIButton() private var remainingSeconds: Int = 0 { willSet { codeBtn.setTitle("重新获取\(newValue)秒", for: .normal) if newValue <=

  • 微信小程序实现发送短信验证码倒计时

    本文实例为大家分享了微信小程序发送短信验证码倒计时的具体代码,供大家参考,具体内容如下 效果图 WXML文件 <view class="container"> <view class="userinfo"> <image class="userinfo-avatar" src="../../images/timg.jpg" mode="cover"></image&

  • vue实现通过手机号发送短信验证码登录的示例代码

    本文主要介绍了vue实现通过手机号发送短信验证码登录的示例代码,分享给大家,具体如下: <template> <div class="get-mobile" @touchmove.prevent> <div class="main"> <div class="pt-20 pr-15 pl-15 pb-20"> <input class="input mb-15" v-mod

  • Spring中使用腾讯云发送短信验证码的实现示例

    目录 1.所需依赖 2.腾讯云配置 (1).获取短信签名 (2).创建正文模板 (3).创建密钥 (4).获取SdkAppId 3.代码 1. 所需依赖 <dependency> <groupId>com.tencentcloudapi</groupId> <artifactId>tencentcloud-sdk-java</artifactId> <version>3.1.313</version> </depen

  • 用Javascript实现发送短信验证码间隔功能

    在很多app和网站中,我们登陆或者注册账号,会有一个发送短信验证码的地方1,然而为了防止恶意获取验证码,我们一般都设置了可点击的时间间隔,时间间隔1完了过后,便又可以继续发送,接下来用代码实现 代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head>

  • vue 实现通过手机发送短信验证码注册功能

    效果如下: 代码如下: template代码: <el-main> <el-form :model="ReginForm" ref="ReginForm" :rules="rule" class="regform" label-width="0"> <h3 class="login-text">手机注册</h3> <el-form-i

  • Java实现发送短信验证码功能

    一个发送短信验证码的功能,使用的是信易通的短信平台接口,然后在Java中使用HttpClient模拟POST请求或者GET请求(看短信平台要求,一般的情况下都是POST请求),调用短信平台提供的接口(遵循短信平台的接口规范即可).具体看代码: 使用HttpClient的时候需要在项目中引入: commons-httpclient-3.1.jar 这个jar包, 项目结构: 1.创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法 /** * 文件说明 * @Descriptio

随机推荐