如何在单个 editText 中添加多个 sytleSpan?

how to add multiple sytleSpan in single editText?

我正在使用 editTextbuttons,布局包含 四个 按钮

  1. btnBold
  2. btn斜体
  3. btnStrike
  4. btn下划线

和一个 editText etDescription

现在,我在这里通过单击按钮

来设置我的 editText's selected text 样式

使用此代码

CharacterStyle styleBold, styleItalic, styleUnderline, styleStrike;

 styleBold = new StyleSpan(Typeface.BOLD);
 styleItalic = new StyleSpan(Typeface.ITALIC);
 styleUnderline = new UnderlineSpan();
 styleStrike = new StrikethroughSpan();


 @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btnItalic:
                makeIt(styleItalic);
                break;

            case R.id.btnBold:
                makeIt(styleBold);
                break;

            case R.id.btnUnderline:
                makeIt(styleUnderline);
                break;
            case R.id.btnStrike:
                makeIt(styleStrike);
                break;
        }
    }

    private void makeIt(CharacterStyle characterStyle) {
        String wholeTextUnder = etDescription.getText().toString();
        int startu = etDescription.getSelectionStart();
        int endu = etDescription.getSelectionEnd();

        SpannableStringBuilder sbu = new SpannableStringBuilder(wholeTextUnder);

        sbu.setSpan(characterStyle, startu, endu, 0);
        etDescription.setText(sbu);
    }

它给了我整个 editText single style

就像我 select 文本 1-10 然后将其设为 粗体 一样!

但是,当我 select 其他文本然后将其改成 italicstrikeunderline 之类的其他文本时,之前的文本变得正常并且新的更改成功。

我希望周围的文字也保持不变

等待答复!

提前致谢!!

编码愉快!

您的问题是当您调用 String wholeTextUnder = etDescription.getText().toString(); 时您已经将其更改为 String 这意味着您设置的任何 Span 都将被清除。试试这个。

private void makeIt(CharacterStyle characterStyle) {
    CharSequence wholeTextUnder = etDescription.getText();
    int startu = etDescription.getSelectionStart();
    int endu = etDescription.getSelectionEnd();

    SpannableStringBuilder sbu = new SpannableStringBuilder(wholeTextUnder);

    sbu.setSpan(characterStyle, startu, endu, 0);
    etDescription.setText(sbu);
}