Android(安卓)EditText设置Filter以后,xml布局文件中maxLength不起作用的解决办法
16lz
2021-01-26
Android EditText设置Filter以后,xml布局文件中maxLength不起作用的解决办法
- 问题发现
- 问题思考
- 问题解决
问题发现
最近项目里有个需求,文本框禁用emoji表情的输入,因为用到的地方较多,第一个想到的是继承EditText,重写这个控件,然后定义一个过滤器来过滤。做完的时候发现,我在xml布局文件中设置的maxLength不起作用了,找了半天,定位到问题在设置filter这里,当我取消掉自定义的过滤器,就恢复正常了。
下面是解决前的代码:
public class FilterEmojiEditText extends android.support.v7.widget.AppCompatEditText { InputFilter[] fileList = new InputFilter[]{new MyInputFilter()}; public FilterEmojiEditText(Context context) { this(context,null); } public FilterEmojiEditText(Context context, AttributeSet attrs) { this(context,null,0); } public FilterEmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { setFilters(fileList); }}
问题思考
想了几个办法,都没有实现,最后看EditText控件源码,看到一个方法,getFilters(),看了下能获取到本来有的filter,所以就想着设置之前把原来的拿过来,一起设置下。思路有了,开始撸代码。
问题解决
下面是解决后的代码:
public class FilterEmojiEditText extends android.support.v7.widget.AppCompatEditText { InputFilter[] fileList ; public FilterEmojiEditText(Context context) { this(context,null); } public FilterEmojiEditText(Context context, AttributeSet attrs) { this(context,null,0); } public FilterEmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { if(getFilters() != null && getFilters().length > 0){ fileList = new InputFilter[getFilters().length +1]; for (int i = 0;i < getFilters().length;i++){ fileList[i] = getFilters()[i]; } fileList[fileList.length-1] = new MyInputFilter(); setFilters(fileList); }else { fileList = new InputFilter[]{new MyInputFilter()}; setFilters(fileList); } }}
如有问题,欢迎指正!
更多相关文章
- android ListView显示网络图片
- Android下的配置管理之道之gerrit权限管理
- Android(安卓)studio APP开发 控制UI布局的方式,用代码书写UI界面
- android 表格控件
- android 地图服务开发 INSTALL_FAILED_MISSING_SHARED_LIBRARY
- Android欢迎界面,一个Activity搞定
- 定制Android关机界面
- Android面试常客之Handler全解
- android 今日头条的屏幕适配理解