我已經實現了一個可以帶粗體,斜體,下劃線文本的自定義EditText。 一切工作正常,除非我嘗試通過長按退格按鈕來刪除文本。在長時間按下退格鍵時,清除文本會有延遲。自定義EditText凍結使用退格鍵清除文本
這裏是被覆蓋的onTextChanged()方法
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
Log.d(VIEW_LOG_TAG,"Start: "+start+" Length before: "+lengthBefore+" Length After: "+lengthAfter+" TextLength: "+text.length());
Spannable str = this.getText();
CharacterStyle ss;
UnderlineSpan ss1=null;
int endLength = text.toString().length();
switch (currentTypeface) {
case TYPEFACE_NORMAL:
ss = new StyleSpan(Typeface.NORMAL);
break;
case TYPEFACE_BOLD:
ss = new StyleSpan(Typeface.BOLD);
break;
case TYPEFACE_ITALICS:
ss = new StyleSpan(Typeface.ITALIC);
break;
case TYPEFACE_BOLD_ITALICS:
ss = new StyleSpan(Typeface.BOLD_ITALIC);
break;
case TYPEFACE_UNDERLINE:
ss= new UnderlineSpan();
break;
case TYPEFACE_BOLD_UNDERLINE:
ss = new StyleSpan(Typeface.BOLD);
ss1=new UnderlineSpan();
break;
case TYPEFACE_ITALICS_UNDERLINE:
ss = new StyleSpan(Typeface.ITALIC);
ss1=new UnderlineSpan();
break;
case TYPEFACE_BOLD_ITALICS_UNDERLINE:
ss = new StyleSpan(Typeface.BOLD_ITALIC);
ss1=new UnderlineSpan();
break;
default:
ss = new StyleSpan(Typeface.NORMAL);
}
if(lastCursorPosition>endLength)
return;
Log.d(TextArea.class.getSimpleName(), new Integer(lastCursorPosition).toString() + new Integer(endLength).toString());
if(ss1!=null)
str.setSpan(ss1, lastCursorPosition, endLength, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(ss, lastCursorPosition, endLength, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
你的'button'和'setOnLongClickListener'在哪裏? –
@MehranZamani他在談論鍵盤 - 他不會有按鈕或點擊監聽器,鍵盤應用程序會。 –