开发安卓已经几年了,但我没有整理过。 我一直在写。 从今天开始慢慢整理。 如果总结的地方有错误的话请指出来。 谢谢
文本助手什么时候调用?
当edittext的内容发生变化时调用TextWatcher
文本观察器有三种方法
before textchanged (char sequences,int start,int count,int after )。
文本在变化之前被调用,start表示开始变化的位置,count表示变化的字符长度,after表示变化后该位置的字符数
ontextchanged(charsequences,int start,int before,int count )。
文本发生变化时调用。 此时,s的内容正在变化。 start表示开始变化的位置,before表示变化前该位置的字符数,count表示变化的字符数
后文字转换(editable s )。
文本变化后调用,s是变化了的文本的结果
例:
在空白输入框中输入字符
Paste_Image.png
第一,初始长度为0,变化位置为0,变化字符为0,变化后的此位置表示字符长度为1
第二个意思是,在这种情况下,字符长度为1,变化位置为0,变化前的字符长度为0,变化字符数为1
第三个意思是变化结束后的字符长度为1
以下是一个小型的demo,实现了edittext信用卡格式,主要使用文本查看器和Editable的几种方法
GIF.gif
publicclasscreditcardviewextendsedittext {
publiccreditcardview (上下文上下文) {
super (上下文;
init (;
}
publiccreditcardview (上下文,属性et attrs ) {
super (上下文、attrs );
init (;
}
publiccreditcardview (上下文上下文,属性et attrs,int defStyleAttr ) {
super (上下文、attrs、defStyleAttr );
init (;
}
私有语音init (
this.addtextchangedlistener (settext watcher ) );
}
隐私保护watchersettextwatcher (
textwatchertextwatcher=new text watcher (
//是否删除记录
布尔型isdel=false;
@Override
publicvoidbeforetextchanged (char sequences,int start,int count,int after ) {
log.d('find ',' beforetextchangedlength==' s.length ),start==' start ',count==' count ',after==
}
@Override
publicvoidontextchanged (char sequences,int start,int before,int count ) {
log.d('find ',' onTextChangedlength==' s.length ),start==' start ',before==' before ',count==' stararart
基础计数(//删除
isDel=true;
} else {
isDel=false;
}
}
@Override
Publicvoidaftertextchanged{
log.d('find ',' aftertextchangedlength==' s.length ) );
if (! isdel0 s.length(0s.length ) )1) s.length ) % 5==0) {
//在指定位置之前插入
s.insert(s.Length ) (-1,'-' );
}
if(isdel0s.length () 0s.length ) )1) s.length ) % 5==0) {
//删除指定的位置开始区间[start,end
s.delete(s.length )-1,s.length );
}
}
(;
返回文本观察器;
}
}