【问题标题】:how to add multiple sytleSpan in single editText?如何在单个editText中添加多个sytleSpan?
【发布时间】:2020-05-25 10:40:13
【问题描述】:

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

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

还有一个editTextetDescription

现在,我在这里通过单击按钮来设置 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

就像当我选择文本 1-10 然后将其设置为 bold 时它可以工作!

但是,当我选择其他文本时,然后将其设置为其他文本,例如 italicstrikeunderline,然后之前的文本变为正常,新的更改成功。

我希望之前的文字也保持不变

等待答复!

提前致谢!!

编码愉快!

【问题讨论】:

    标签: java android android-edittext styles


    【解决方案1】:

    您的问题是当您调用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 textetDescription.getText().toString(); 给了我没有任何样式的简单文本
    • 什么意思?你想知道为什么 toString 方法给出的文本没有样式吗?
    猜你喜欢
    • 1970-01-01
    • 2014-09-20
    • 2016-05-25
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2017-12-14
    • 2016-03-27
    • 1970-01-01
    相关资源
    最近更新 更多