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

Java 如何在单个editText中添加多个sytleSpan?,java,android,android-edittext,styles,Java,Android,Android Edittext,Styles,我使用的是editText和按钮,布局包含四个按钮 btnBold B硝酸盐 btnStrike B基准线 和一个editTextetDescription 现在,我通过单击按钮来设置我的editText所选文本的样式 使用此代码 CharacterStyle styleBold, styleItalic, styleUnderline, styleStrike; styleBold = new StyleSpan(Typeface.BOLD); styleItalic = new Sty

我使用的是
editText
按钮
,布局包含四个按钮

  • btnBold
  • B硝酸盐
  • btnStrike
  • B基准线
  • 和一个
    editText
    etDescription

    现在,我通过单击按钮来设置我的
    editText所选文本的样式

    使用此代码

    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
    a
    单一风格

    就像我选择文本1-10,然后将其设置为粗体一样,它可以工作

    但是,当我选择其他文本,然后将其设置为其他文本,如
    斜体
    删除
    下划线
    ,那么以前的文本将变为正常文本,新的更改将成功

    我希望perivous文本也保持不变

    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);
        }
    
    等待回答

    提前谢谢


    快乐编码

    问题在于调用
    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);
    }
    

    您能告诉我如何获取
    spannable text
    etDescription.getText().toString()给我的是没有任何样式的简单文本你是什么意思?您想知道为什么toString方法给出的文本没有正确的样式?