1

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));
    }
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 に答える