EditText的输入联动及其他一些用 4000 法总结
2017-11-26 09:52
453 查看
1.给EditText设置输入联动
之前做过这么一个需求:一个布局里有多行表格,可供用户导入数据,导入的数据是同一条的话要对这些行里的Edittext设置输入联动,打个比方:
电影名称 | 上映时间 | 导演 | |
---|---|---|---|
1.年度票房最高 | ….. | … | … |
2.年度评分最高 | ….. | … | … |
3.年度最佳动作片 | ….. | … | … |
1、假如第一行与第二行为同一电影,那么输入1的上映时间2也随之变化;输入2同理;
2、用户更改导入,第一行与第三行为同一电影,那么修改1的内容3会随之变化,2不再变化;
代码:
/** * * @param beforeDot 整数位数控制 * @param afterDot 小数位数控制 * @param position 每一行第几个字段 * @param type 特定表格需求,可无视 * @param editText edittext对象 */ private void editTextContentFilter(int beforeDot,int afterDot,String position,int type,EditText editText){ final MyTextWatcher watcher = new MyTextWatcher(beforeDot, afterDot, position, type); editText.addTextChangedListener(watcher); editText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { watcher.enable=true; }else { watcher.enable=false; } } }); } class MyTextWatcher implements TextWatcher{ private int beforeDot; private int afterDot; private String position; private int type; public boolean enable; private ContentValues upValues; public MyTextWatcher(int beforeDot,int afterDot,String position,int type) { this.beforeDot = beforeDot; this.afterDot = afterDot; this.position = position; this.type = type; upValues = new ContentValues(); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if (enable) { //位数限制 DiaoChaBiaoUtil.judge(s, beforeDot, afterDot); //2.可做一些其他需求控制 //3.输入联动 //这里因表格内容特定,使用的是position和type来获取到具体的一个edittext对象,需自己定制 String key = findEtByPosition(position, TYPE_NUM).getText().toString(); if (relevanceMaps.containsKey(key)) { List<String> list = relevanceMaps.get(key); if (list!=null) { for (String poString : list) { if (!poString.equals(position)) { findEtByPosition(poString, type).setText(s.toString()); } } } } }
关键:
给edittext设置setOnFocusChangeListener监听,通过焦点判断是否为用户主动输入,不然联动的edittext会在afterTextChanged里卡死;
2、控制位数方法:
/** * 在控件已经设置内容监听的情况下,对数字位数控制 * @param editable * @param beforeDot 小数点前位数 * @param afterDot 小数点后位数 */ public static void judge(Editable editable,int beforeDot,int afterDot) { String temp = editable.toString(); int posDot = temp.indexOf("."); //直接输入小数点的情况 if (posDot == 0) { editable.insert(0, "0"); return; } //连续输入0 if (temp.equals("00")) { editable.delete(1, 2); return; } //输入"08" 等类似情况 if (temp.startsWith("0") && temp.length() > 1 && (posDot == -1 || posDot > 1)) { editable.delete(0, 1); return; } //不包含小数点 不限制小数点前位数 if (posDot < 0 && beforeDot == -1) { //do nothing 仅仅为了理解逻辑而已 return; } else if (posDot < 0 && beforeDot != -1) { //不包含小数点 限制小数点前位数 if (temp.length() <= beforeDot) { //do nothing 仅仅为了理解逻辑而已 } else { editable.delete(beforeDot, beforeDot + 1); } return; } //如果包含小数点 限制小数点后位数 if (temp.length() - posDot - 1 > afterDot && afterDot != -1) { editable.delete(posDot + afterDot + 1, posDot + afterDot + 2);//删除小数点后多余位数 } }
3、根据输入内容动态设置字体大小:
float textWidth=0; //middleWidth默认宽 et_value.setWidth(middleWidth); Paint mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); @Override public void afterTextChanged(Editable s) { //树种组成动态设置字体 mTextPaint.setTextSize(et_value.getTextSize()); textWidth=mTextPaint.measureText(s.toString()); int paddingLeft = et_value.getPaddingLeft(); int paddingRight = et_value.getPaddingRight(); while (textWidth>middleWidth-paddingLeft-paddingRight) { et_value.setTextSize(TypedValue.COMPLEX_UNIT_PX,et_value.getTextSize()-1); mTextPaint.setTextSize(et_value.getTextSize()); textWidth=mTextPaint.measureText(s.toString()); } }
相关文章推荐
- 设置EditText只能输入一些特定的字符
- Android EditText限制输入字符的方法总结
- 手机调用系统的拍照和裁剪功能,假设界面有输入框EditText,在一些手机会出现点击EditText会弹出输入法,却不能输入的情况。
- Android EditText输入的一些限制
- edittext输入类型总结
- EditText和TextView其他属性总结
- EditText限制输入emoji表情总结
- android项目中edittext的一些总结
- EditText控件的TextWatcher接口实现和其他控件的联动
- Android EditText限制输入一些固定字符的属性
- 安卓EditText限制输入类型的一些技巧
- EditText输入校验和一些相关的属性
- Android EditText限制只能输入特定字符总结
- QT TextEdit的一些总结
- 关于EditText的焦点和软键盘开关的一些总结
- Android EditText限制输入字符类型的方法总结
- EditText想要让默认输入类型为数字,并且可以切换到其他输入类型
- Android EditText输入字数限制总结(包括中文输入内存溢出的解决方法)
- 手机调用系统的拍照和裁剪功能,假设界面有输入框EditText,在一些手机会出现点击EditText会弹出输入法,却不能输入的情况。
- 手机调用系统的拍照和裁剪功能,如果界面有输入框EditText,在一些手机会出现点击EditText会弹出输入法,却不能输入的情况。