我在爭論一點問題。 我有一個應用程序在EditText視圖中寫入一些格式化的文本。 它確實,通過一個StyleableSpannableStringBuilder:ImageSpans不通過inputconnection/getExtractedText檢索
public class StyleableSpannableStringBuilder extends SpannableStringBuilder
{
public StyleableSpannableStringBuilder appendMarkup(CharSequence text, Context context, int resID)
{
super.append(text);
int startPos = length() - text.length();
ImageSpan kwSpan = new ImageSpan(context, resID, ImageSpan.ALIGN_BASELINE); //(1)
//BackgroundColorSpan kwSpan = new BackgroundColorSpan(Color.RED); //(2)
//BulletSpan kwSpan = new BulletSpan(5, Color.RED); //(3)
//StyleSpan kwSpan = new StyleSpan(Typeface.BOLD_ITALIC); //(4)
setSpan(kwSpan, startPos, length(), SPAN_EXCLUSIVE_EXCLUSIVE);
return this;
}
}
我是否使用(1),(2),(3),(4),I得到的的EditText預期相應裝飾,因此」跨度是工作「就EditText而言。
在柵欄的另一邊,我有一個INPUTMETHOD訪問通過getCurrentInputConnection()本文內容getExtractedText(...),如:
InputConnection ic = getCurrentInputConnection();
if (ic != null)
{
ExtractedTextRequest req = new ExtractedTextRequest();
req.token = mExtractedTextToken;
req.hintMaxChars = MAX_REQUEST_CHARS;
req.flags = InputConnection.GET_TEXT_WITH_STYLES;
mExtractedText = ic.getExtractedText(req, InputConnection.GET_EXTRACTED_TEXT_MONITOR);
}
現在,還是從INPUTMETHOD的角度來看,我想要檢索提取的文本中的跨度。我通過類似的東西做的:
CharacterStyle[ ] spans = mCurrentText.getSpans(0, mCurrentText.length(), CharacterStyle.class);
Object[] rawSpans = mCurrentText.getSpans(0, mCurrentText.length(), Object.class);
Log.e(TAG,"rawSpans :" + rawSpans.length + "/Spans : " + spans.length);
我的問題是,ImageSpan從(1)是不是那些跨陣列的一部分(可能是跨越或rawSpans)跨越,因此,我無法檢測這些特定的跨度,並且不能做進一步的處理。但是,如果我使用(2)(3)或(4),則這些是跨度數組的一部分,如預期的那樣。 ImageSpan有什麼特別之處,它完全繞過了提取的文本?
謝謝你的時間!
我將不得不瀏覽操作系統的源代碼來確認,但它可能是呈現ImageSpan的一部分,它也會在完成後調用removeSpan。 – 0xAFEB 2014-08-28 23:11:31