EditText 你所不知道的东西

本篇不适合初学者阅读。

EditText设置 不可粘贴

自定义EditText。重写public boolean onTextContextMenuItem(intid)  方法。

如果要设置edittext不可编辑:

只要失去焦点就可以。也可以设置editable,不过edittext继承自Textview,不可编辑没什么实际意义

如果输入的内容想进行替换,必须输入小写转大写:

设置public final void setTransformationMethod(TransformationMethod method) ,这个是从textview继承过来的api。 例如:

class AllCapTransformationMethod extends ReplacementTransformationMethod {

@Override

protected char[] getOriginal() {

char[] aa = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

returnaa;

}

@Override

protected char[] getReplacement() {

char[] cc = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

returncc;

}

}

/**

* This transformation method causes the characters in the {@link#getOriginal}

* array to be replaced by the corresponding characters in the

* {@link#getReplacement} array.

*/

public abstract classReplacementTransformationMethod

implementsTransformationMethod

注意,仅仅是显示的时候进行了转换,如果getText 取的还是原值。其实就是修改了缓存。具体可以看源码。

如果想对出入的内容做修改,例如:输入两个字符加一个空格,在输入10个字符加一个空格等。可以再TextWatcher中

insert 或者delete等操作,改变文本,集体逻辑自己想。但是注意见下:

addTextChangedListener(mTextWatcher);即可,private class SeparatorTextWatcher implements TextWatcher {

@Override

public void beforeTextChanged(CharSequence s,intstart,intcount,intafter)

可以具体查看改变前的值。

@Override

public void onTextChanged(CharSequence s,intstart,intbefore,intcount)

可以具体查看改变后的值。

@Override

public void afterTextChanged(Editable s) 

可以修改值。具体详见Editable。

public interface Editable

extends CharSequence, GetChars, Spannable,Appendable

}

可以看到一个是改变前,一个是改变的时候,一个是改变后。 改变的时候会先走onTextChanged,然后再走 afterTextChanged。

注意:如果在TextWatcher中对文本做就该,如:setText ,会再次执行TextWatcher, 所以一定要先removeTextChangedListener,再setText,然后再addTextChangedListener回来。Edittext加载TextWatcher时就会遍历一遍api,切勿在其中直接setText等操作。死循环。

推荐阅读更多精彩内容