maxlength不起作用android,Android EditText设置Filter以后(xml布局文件中maxLength不起作用的解决办法)...
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);
}
}
}
如有問題,歡迎指正!
本文地址:https://blog.csdn.net/m0_38048084/article/details/107770375
總結
以上是生活随笔為你收集整理的maxlength不起作用android,Android EditText设置Filter以后(xml布局文件中maxLength不起作用的解决办法)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字化住宅小区对计算机网络有需求,数字化
- 下一篇: 三星s6 android 8.0,再见A