1

我知道,addTextChangedListener但这并不好。

EditText用作一个简单的富文本编辑器,用户可以编辑粗体、斜体、下划线、文本颜色。我让用户输入文本Html.toHtml(...)

问题:

public class AndroidTestActivity extends Activity implements TextWatcher {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EditText editText = new EditText(this);
        editText.addTextChangedListener(this);
        setContentView(editText);
    }

    public void afterTextChanged(Editable s) {
        Log.e("", ""+Html.toHtml(s));
    }

    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
    public void onTextChanged(CharSequence s, int start, int before, int count) {}    

}

当用户输入时abcd test(见http://i.imgur.com/aRIgm.png),Html.toHtml将是<p>abcd <u><font color ="#78000000">test</font></u></p>,这是不好的,因为用户没有输入它作为带下划线的半透明文本。

当 html 表示也完成时是否有回调?

4

1 回答 1

0

我使用以下代码从文本中删除了组成标记,因此现在它没有下划线和透明度:

public void afterTextChanged(Editable s) {
    SpannableStringBuilder s2 = new SpannableStringBuilder(s);
    removeComposingSpans(s2);
    Log.e("", ""+Html.toHtml(s2));
}

public static void removeComposingSpans(Spannable s) {
    Object[] spans = s.getSpans(0, s.length(), Object.class);
    for (Object object : spans) {
        int flags = s.getSpanFlags(object);
        if ((flags & Spannable.SPAN_COMPOSING) > 0) {
            s.removeSpan(object);
        }
    }
}
于 2012-10-31T08:35:52.843 回答