前言
在项目中,不管是Android平台的或者其他平台的,都遇到过用户在一定的时间段内多次触发同一个事件,导致流程或者状态存在错误等问题。
既然存在,那就需要解决不让用户在一定的时间段内重复的点击。
解决这个问题大概有两种思路。
- 同一段时间内不让用户点击(过滤点击时间)
- 同一段时间设置内控件不响应点击
下面以Android中为例讲解。
防爆力点击
不让用户点击(过滤点击事件)
这种是过滤用户的点击事件
// 记录上一次点击响应时的时间点,默认为0 long mLastClickTime= 0; // 定义间隔时间 final long CLICK_INTERVAL_TIME = 300; // 下面是放入点击时间响应前过滤 if (SystemClock.uptimeMillis() - mLastClickTime < CLICK_INTERVAL_TIME) { // 如果小于设定的范围就忽略 return; } else { mLastClickTime = SystemClock.uptimeMillis(); }
或许有些人会问为啥用SystemClock.uptimeMillis()这个计时而不是其他的。这个问题我看过过《「安卓开发」Android防暴力点击事件处理解决方法及其存在的问题》有解释,觉得不错,因此摘抄部分于此。
- System.currentTimeMillis() 系统时间,会根据手机系统中设置的时间改变;
- Calendar.getInstance().getTimeInMillis() 这种方式是最low的。因为每次点击都会创建一个Calendar实例,在后端开发中,都是拒绝使用这个类的,因为效率会比较低。
- SystemClock.uptimeMillis() 自开机后,经过的时间,不包括深度睡眠的时间。Looper中所使用的也是这个方法,对时间间隔的计算比较有保证。
- SystemClock.elapsedRealtime() 自开机后,经过的时间,包括深度睡眠的时间。
控件不响应点击时间
这种方式就是让控件不能点击。
Android的RadioButton、Button等都存在设置setEnabled()来是否允许用户可以点击的状态。
/** * 设置RadioButton是否可以点击 * * @param enable */ private void setRadioButtonEnable(boolean enable) { //设置RadioButton是否可点 rb_one.setEnabled(enable); rb_two.setEnabled(enable); //如果设置了不可点击(false),延迟一定时间后恢复可以点击。 if (!enable) { mHandler.sendEmptyMessageDelayed(MSG_DELAY_SET_CHECKBOX_ENABLE, DELAY_RADIOBUTTON_CLICK_TIME); } return; }
小结
实际中需要自己去判断用哪一种。
个人偶尔偏向于第一次中,用得也比较多。
第二种使用需要注意setEnabled()设置后会改变一些控件的颜色状态,比如Button的可点击和不能点击的颜色可能不同(不能点击一般都是灰色的),为了不让用户感觉状态变了,可以同一配置一样的背景颜色。当然也有些就是需要通过改变颜色,从视觉上告诉用户我不能点击,这个要看项目需求。
参考文章
历史上的今天
暂无评论...
随机推荐
wordpress隐藏文章的部分内容,登录可见
前言隐藏文章的部分内容,需要注册登录网站后可见正文下面是实现代码和使用方式。function.php 末尾/** * WordPress 只允许已登录的用户查看文章内容 */add_shortcode( 'members_only', 'members_only_shortcode...
Android状态栏之LabelView
前言LabelView是一个监听栈顶应用变化并应用的label(也就是应用名称)展示的View。一般在顶部状态栏中常用。封装在一起,这样只需要在xml中添加即可,简单方便,可移植。记录于此,方便自己查阅。正文涉及功能时时监听顶部Activity变化获取当前Activity的la...
朱自清:正义
正义是在我们心理!从明哲的教训和见闻的意义中,我们不是得着大批的正义么?但白白的搁在心里,谁也不去取用,却至少是可惜的事。两石白米搁在屋里,总要吃它干净,两箱衣服堆在屋里,总要轮流穿换,一大堆正义却扔在一旁,满不理会,我们真大方,真舍得!看来正义这东西也真*,竟抵不上白米的一个尖儿,衣服的一个扣儿。...
adb获取Android系统属性
在android系统中,它的根文件系统下有几个用于启动系统时需要的配置文件:/init.rc/default.prop/system/build.prop通常我们可以通过命令getprop获取,setprop设置;在使用这两个命令前,先看看build.prop里面到底有些什么东西:...
获取Android设备的分辨率各种方式
前言有时候需要查看Android设备的分辨率,由于不同的Android版本,使用的方式存不同,因此这里记录一下常用的方式。总结下面三种方式都可以,但个人还是热衷于使用adb,只要连接上设备就可以获取。如果不是Android 4.2.2 环境 我就用:adb shell wm size...
Android中onConfigurationChanged的总结
前言记录一下Android设备横屏、竖屏和分屏的适配说明。正文Android应用中不在AndroidManifest.xml做配置时,我的如下(这里配置很多,看你自己需求删减,这里也不一一介绍):<activity android:name=".MainActivity" ...