我有一个 EditText ,可以添加格式,如粗体,斜体......但是如何删除它?我已经研究了getSpans,过滤器和其他非字符串的东西,但却无法理解它们!理想情况下,我希望能够清除所选文本周围的特定标签和所有标签。
使用我的解决方案进行更新:
private String getSelectedText(){
int start = Math.max(mText.getSelectionStart(), 0);
int end = Math.max(mText.getSelectionEnd(), 0);
return mText.getText().toString().substring(Math.min(start, end), Math.max(start, end));
}
private void clearFormat(){
int s1 = Math.max(mText.getSelectionStart(), 0);
int s2 = Math.max(mText.getSelectionEnd(), 0);
String text = getSelectedText(); if(text==""){ return; }
EditText prose = mText;
Spannable raw = new SpannableString(prose.getText());
CharacterStyle[] spans = raw.getSpans(s1, s2, CharacterStyle.class);
for (CharacterStyle span : spans) {
raw.removeSpan(span);
}
prose.setText(raw);
//Re-select
mText.setSelection(Math.min(s1,s2), Math.max(s1, s2));
}
答案 0 :(得分:4)
但是如何将其删除?
致电removeSpan()
上的Spannable
。
例如,this sample project中的此方法在TextView
的内容中搜索搜索字符串并为其指定背景颜色,但仅在删除任何先前的背景颜色后才会显示:
private void searchFor(String text) {
TextView prose=(TextView)findViewById(R.id.prose);
Spannable raw=new SpannableString(prose.getText());
BackgroundColorSpan[] spans=raw.getSpans(0,
raw.length(),
BackgroundColorSpan.class);
for (BackgroundColorSpan span : spans) {
raw.removeSpan(span);
}
int index=TextUtils.indexOf(raw, text);
while (index >= 0) {
raw.setSpan(new BackgroundColorSpan(0xFF8B008B), index, index
+ text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
index=TextUtils.indexOf(raw, text, index + text.length());
}
prose.setText(raw);
}
}
答案 1 :(得分:0)
你可以尝试的是:
1-创建一个自定义样式,其中EditText将具有“如粗体,斜体......”
2-注意使用R.style.normalText
将其更改回运行时的正常样式
3-根据您希望通过setTextAppearance(Context context, int resid)
以下是我发现Google搜索How to change a TextView's style at runtime
的示例编辑:因为您的问题是“如何从EditText清除格式”,这里的具体答案是代码:
editTextToClearStyle.setTextAppearance(this,R.style.normalText);
答案 2 :(得分:0)
请参阅下面代码段的评论。
if (makeItalic) {
SpannableString spanString = new SpannableString(textViewDescription.getText());
spanString.setSpan(new StyleSpan(Typeface.ITALIC), 0, spanString.length(), 0);
this.textViewDescription.setText(spanString);
} else {
SpannableString spanString = new SpannableString(
textViewDescription.getText().toString()); // NOTE: call 'toString()' here!
spanString.setSpan(new StyleSpan(Typeface.NORMAL), 0, spanString.length(), 0);
this.textViewDescription.setText(spanString);
}
...只需通过调用toString()
方法获取原始字符串字符。