本篇不适合初学者阅读。
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等操作。死循环。