自定义一个控制输入小数或整数的位数的EditText
来源:互联网 发布:hex转ascii算法 编辑:程序博客网 时间:2024/05/22 16:17
需求:要求可以最多输入4位整数,并且小数部分最多输入2位,也就是xxxx.xx类型的字符串,中间包含很多组合比如xxx.x或者xx.xx等等,所以为了方便下一次使用决定自定义一个Edittext。
思路:监听输入框的字符输入,符合要求则显示,不符合要求则显示上一次的字符
废话不多说直接上代码:
1,自定义的EditText:
public class FloatEditTextView extends EditText implements TextWatcher { private String lastNumber; private Context context; private int integer_part; //整数部分 private int decimal_part; //小数部分 public FloatEditTextView(Context context) { this(context,null); } public FloatEditTextView(Context context, AttributeSet attrs) { this(context, attrs,android.R.attr.editTextStyle); } public FloatEditTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context =context; init(attrs); } private void init(AttributeSet attrs) { TypedArray typedArray = context.getTheme().obtainStyledAttributes( attrs, R.styleable.FloatEditTextView, 0, 0); setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL); integer_part =typedArray.getInteger(R.styleable.FloatEditTextView_integer_part,1); decimal_part =typedArray.getInteger(R.styleable.FloatEditTextView_decimal_part,1); if(integer_part>0&&decimal_part>0) { addTextChangedListener(this); } } @Override public void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { lastNumber = s.toString(); } @Override public void afterTextChanged(Editable s) { String temp = s.toString(); int posDot = temp.indexOf("."); if (Pattern.matches("^[0-9]{1,"+integer_part+"}(\\.[0-9]{1,"+decimal_part+"})?$",temp)) { if(temp.startsWith("0")&&!temp.equals("0")){ if(posDot>1||posDot<0){ 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 void setEditable(boolean flag) { setFocusable(flag); setFocusableInTouchMode(flag); }}2.资源文件中定义自己需要的属性,这里也就是使用过程中需要传递的参数,
integer_part
代表整数部分的位数,decimal_part
代表小数部分的位数<declare-styleable name="FloatEditTextView"> <attr name="integer_part" format="integer"></attr> <attr name="decimal_part" format="integer"></attr></declare-styleable>3.使用该自定义的view
<com.view.FloatEditTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@color/common_black" android:textSize="16sp" android:background="@null" myView:integer_part="4" myView:decimal_part="2" />这里两个参数分别传了4和2也就是最多整数4位,小数2位,分享至此就结束了,这个过程中,最关键的还是正则表达式的书写,做出准确的判断,如果各位还有更好的办法,欢迎分享。
阅读全文
0 0
- 自定义一个控制输入小数或整数的位数的EditText
- EditText 限制输入整数和小数 的位数
- Android基础--EditText输入框限制小数的位数解决方法
- 自己封装的一个Edittext工具,让其只能输入指定位数的小数,同时不大于指定数
- MFC 编辑框控制只输入小数,并控制小数位数,整数位数,值
- JS控制文本框只能输入整数或带一位小数的浮点数
- iOS 精确控制textField输入的小数位数
- 控制小数显示的位数
- EditText保留小数位数的问题
- 只能输入整数或小数的正则表达式
- 只能输入整数或小数的正则表达式
- Android EditText 限制输入类型数字或小数,并且小数位数限定为两位
- C#判断整数、小数位数的限定
- Java:求整数位数:任意输入一个整数(小于10位),求它的位数
- android edittext 限制输入框小数位数
- android edittext 限制输入框小数位数
- android EditText限制输入框小数位数
- android edittext 限制输入框小数位数
- Bcp导出数据库数据为CSV文件(不带表头)
- 串口通信参数设置
- js与json
- 二分查找算法
- 基于Token的WEB后台认证机制
- 自定义一个控制输入小数或整数的位数的EditText
- spring bean初始化的完整生命周期
- matlab---文件路径操作
- 在Unity3D中用C#封装一个类似AS3的ByteArray类(二)--升级版
- leetcode题解-83. Remove Duplicates from Sorted List
- 修改Maven编译的JDK版本
- 基于VLC的播放器开发
- SDC沙盒技术
- java io