EditText属性
EditText继承关系:View–>TextView–>EditText
EditText部分属性介绍:
1 | android:hint="请输入数字!"//设置显示在空间上的提示信息 |
代码中限制输入字数
1 | edt.setFilters(new InputFilter[]{new InputFilter.LengthFilter(length)}); |
限制Edt内容
限制Edt输入内容的类型
自定义TextWatcher类
1 | public class LimitInputTextWatcher implements TextWatcher { |
调用
1 | // 只允许字母、汉字 |
限制Edt只能输入整数或者最多两位小数,且整数不能以0开头
1 | edt.addTextChangedListener(new TextWatcher() { |
1 | /** |
限制首位不能是空格
1 | edt.addTextChangedListener(new TextWatcher() { |
限制Edt不能输入表情符号
1 | InputFilter inputFilter = new InputFilter() { |
上面限制的表情会有少部分没法限制
限制输入类型,且首位是下划线或字母开头
微信号规则:微信号必须以字母或者下划线开头,可以使用6-20位数字、字母、下划线、减号或它们的组合
1 | String digits = "_-0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; |
过滤Edt内容
1 | public static void setProhibitEmoji(EditText et) { |
1 | public static InputFilter getInputFilterProhibitEmoji() { |
1 | public static boolean getIsEmoji(char codePoint) { |
上面这种限制的表情更不全(比上面《限制Edt不能输入表情符号》更不全)
保证点击editText时光标总在最后
1 | package com.landi.sqsm.cashier.widget; |
光标显示在最后一位且弹出键盘
1 | //使用控件.post确保控件已经渲染完毕 |
代码中设置了setSoftInputMode,AndroidManifest中可以不用设置 android:windowSoftInputMode=”stateVisible”
光标透明
在drawable下新建edittext_cursor.xml
1 |
|
在xml的<EditText>
上使用
1 | android:textCursorDrawable="@drawable/edittext_cursor" |
验证码框效果
实现:4个TextView,上面覆盖一个EditText。EditText接收输入、黏贴等,再把内容截取设置到对应的Tv上。另外,要让光标透明(因为EditText上的光标位置并没有对应上tv)
注意:EditText的cursorVisible得是true,否则长按黏贴功能使用不了
完整代码
自定义控件
1 | public class VerificationCodeEditText extends KDataBindingCustomView<VerificationCodeEditTextBinding> { |
其中的KDataBindingCustomView
1 | /** |
布局文件layout_verification_code_edit_text.xml
1 |
|
使用
1 | <xxx.widget.verifycode.VerificationCodeEditText |
问题:无法一进入页面就弹出键盘
解决:给对应editText设置个延迟的展示键盘(用延迟的获取焦点可能还无法唤起键盘)
1 | mBinding.etAuthCodeV1.getInputEt().postDelayed(() -> com.blankj.utilcode.util.KeyboardUtils.showSoftInput(mBinding.etAuthCodeV1.getInputEt()), 200); |
Demo
可清空的edittext
1 | import android.content.Context; |
问题
EditText全选效果无效
现象:点击之后,先出现全选,然后会失去全选的效果
解决:思路是借助外部新建的一个EditText控件,在onTouch时先把焦点给其他的EditText,然后再设置全选
1 | if(motionEvent.getAction() == MotionEvent.ACTION_UP){ |
xml布局中:
1 | android:focusable="true" |
全部代码:
1 | fragmentScanPlatepayAcctMoney.setOnTouchListener(new View.OnTouchListener() { |
1 | <EditText |
edittext和Scrollview滑动条冲突问题
1 | //解决edittext和Scrollview滑动条冲突问题 |
EditText不自动换行
添加属性android:inputType="textMultiLine"