新闻详情

新闻详情

首页 / 资讯中心 / 详情

自定义一个控制输入小数或整数的位数的EditText

发布时间:2026/9/4 19:49:16来源:尧图网络
自定义一个控制输入小数或整数的位数的EditText
需求要求可以最多输入4位整数并且小数部分最多输入2位也就是xxxx.xx类型的字符串中间包含很多组合比如xxx.x或者xx.xx等等所以为了方便下一次使用决定自定义一个Edittext。思路监听输入框的字符输入符合要求则显示不符合要求则显示上一次的字符废话不多说直接上代码1自定义的EditText:public classFloatEditTextViewextendsEditTextimplementsTextWatcher {privateStringlastNumber;privateContextcontext;private intinteger_part;//整数部分private intdecimal_part;//小数部分publicFloatEditTextView(Context context) {this(context,null);}publicFloatEditTextView(Context context,AttributeSet attrs) {this(context,attrs,android.R.attr.editTextStyle);}publicFloatEditTextView(Context context,AttributeSet attrs, intdefStyleAttr) {super(context,attrs,defStyleAttr);this.contextcontext;init(attrs);}private voidinit(AttributeSet attrs) { TypedArray typedArray context.getTheme().obtainStyledAttributes( attrs,R.styleable.FloatEditTextView,0,0);setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL);integer_parttypedArray.getInteger(R.styleable.FloatEditTextView_integer_part,1);decimal_parttypedArray.getInteger(R.styleable.FloatEditTextView_decimal_part,1);if(integer_part0decimal_part0) { addTextChangedListener(this);} }Overridepublic voidonTextChanged(CharSequence text, intstart, intlengthBefore, intlengthAfter) { }Overridepublic voidbeforeTextChanged(CharSequence s, intstart, intcount, intafter) {lastNumber s.toString();}Overridepublic voidafterTextChanged(Editable s) { String temp s.toString();intposDot temp.indexOf(.);if(Pattern.matches(^[0-9]{1,integer_part}(\\.[0-9]{1,decimal_part})?$,temp)) {if(temp.startsWith(0)!temp.equals(0)){if(posDot1||posDot0){ setText(temp.substring(1));setSelection(getText().length());} } }else{if(temp.endsWith(.)) {if(temp.length() 1) { setText(0.0);return;}if(temp.length() lastNumber.length()) { String str temp.substring(0,temp.length() -1);setText(str);setSelection(getText().length());return;}else{return;} }else if(temp.startsWith(.)) { setText(temp.substring(1,getText().length()));return;}else{if(!TextUtils.isEmpty(temp)temp!lastNumber) { setText(lastNumber);setSelection(getText().length());} } } }/*** 输入框编辑状态*/public voidsetEditable(booleanflag) { setFocusable(flag);setFocusableInTouchMode(flag);} }2.资源文件中定义自己需要的属性这里也就是使用过程中需要传递的参数integer_part代表整数部分的位数decimal_part代表小数部分的位数declare-styleablenameFloatEditTextViewattrnameinteger_partformatinteger/attrattrnamedecimal_partformatinteger/attr/declare-styleable3.使用该自定义的viewcom.view.FloatEditTextViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:textColorcolor/common_blackandroid:textSize16spandroid:backgroundnullmyView:integer_part4myView:decimal_part2/这里两个参数分别传了4和2也就是最多整数4位小数2位分享至此就结束了这个过程中最关键的还是正则表达式的书写做出准确的判断如果各位还有更好的办法欢迎分享。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

P95 与 P99 延迟尖刺排查:慢请求到底是慢在召回还是模型生成 2026/9/4 22:23:20

P95 与 P99 延迟尖刺排查:慢请求到底是慢在召回还是模型生成

P95 与 P99 延迟尖刺排查:慢请求到底是慢在召回还是模型生成在大模型问答(RAG)生产系统的日常巡检中,监控大盘上最刺眼的数据莫过于:平均延迟(Avg Latency)明明只有 350ms,但 P99 延…

阅读更多 →
分块大小对上下文填充的影响:Token 预算与信息密度的平衡 2026/9/4 22:23:20

分块大小对上下文填充的影响:Token 预算与信息密度的平衡

分块大小对上下文填充的影响:Token 预算与信息密度的平衡在优化 RAG 问答质量时,很多工程师常常面临一个艰难的取舍:给大模型投喂的上下文到底该切多大? 如果分块设得小(如 256 Token),在有限的…

阅读更多 →
从“纯手工大模型”到本地部署:图灵测试与可信AI的工程真相 2026/9/4 22:23:20

从“纯手工大模型”到本地部署:图灵测试与可信AI的工程真相

这轮因为“纯手工跑大模型”引发的网络群聊,可能是近期最值得技术人停下来多想一会儿的现象。一个真人躲在聊天框后面,用逐字敲击的方式扮演AI助手,结果把不少网友聊到破防:有人对着屏幕道谢,有人反复追问“你到底是不…

阅读更多 →
AI推理加速14倍?拆解模型提速的六种尺子与验证方法 2026/9/4 22:23:20

AI推理加速14倍?拆解模型提速的六种尺子与验证方法

第一次看到“GPT-5.6 Sol 被 OpenAI 加速 14 倍”这条讨论时,我的第一反应不是兴奋,而是先找尺子:这里的 14 倍,到底是在哪一层量出来的?在模型圈待久了会发现,一个“加速 N 倍”的数字,经常可以…

阅读更多 →
基于51单片机与Proteus的货车侧翻检测系统仿真全流程解析 2026/9/4 22:23:20

基于51单片机与Proteus的货车侧翻检测系统仿真全流程解析

简介:本资源是一套面向嵌入式初学者与课程设计者的51单片机实践项目,聚焦货车侧翻风险实时监测这一典型安全应用场景。系统以Proteus仿真为核心,通过滑动变阻器模拟车身两侧高度差,实现倾斜度阈值可设、超限自动报警与模拟刹车功能…

阅读更多 →
Fastbin Dup 利用原理与双重释放(Double Free)缓解机制演进 2026/9/4 22:20:20

Fastbin Dup 利用原理与双重释放(Double Free)缓解机制演进

Fastbin Dup 利用原理与双重释放(Double Free)缓解机制演进在 Linux glibc 堆内存管理机制中,Fastbin 是为了加速小尺寸内存分配而设立的单向无头链表结构。早期二进制利用中,Fastbin Dup 作为最基础且威力巨大的堆利用手法之一&a…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞