1

我有一个EditText,并且可以添加粗体、斜体等格式……但是如何删除它?我研究了 getSpan、过滤器和其他非字符串的东西,但无法理解它们!理想情况下,我希望能够清除特定标签和围绕所选文本设置的所有标签。

更新我的解决方案:

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));
    }
4

3 回答 3

4

但我怎样才能删除它?

调用. removeSpan()_Spannable

例如,此示例项目中的此方法在 a 的内容中搜索搜索字符串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);
  }
}
于 2013-08-10T00:26:21.983 回答
0

你可以尝试的是:

1-创建一个自定义样式,其中您的 EditText 将具有“例如粗体、斜体......”

2-注意使用R.style.normalText在运行时将其更改回正常样式

3-根据您想要通过的行为更改此样式setTextAppearance(Context context, int resid)

这是我在谷歌上搜索如何在运行时更改 TextView 的样式的示例

编辑:因为您的问题是“如何从 EditText 清除格式”,所以这里是代码的具体答案:

editTextToClearStyle.setTextAppearance(this,R.style.normalText);
于 2013-08-09T23:49:19.160 回答
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()...只需通过调用该方法获取原始字符串字符。

于 2018-04-25T11:19:25.087 回答