我知道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
(请参阅https://i.stack.imgur.com/61dlu.png), Html.toHtml
将为 <p>abcd <u><font color ="#78000000">test</font></u></p>
,这不好,因为用户没有将其输入它,因为用户没有按照下半式的半透明的方式输入它文字。
当html表示也被敲定时是否有回调?
我使用以下代码从文本中删除编写标记,因此现在没有下划线和透明度:
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);
}
}
}