как добавить несколько sytleSpan в один editText? - PullRequest
1 голос
/ 25 мая 2020

Я работаю с editText и buttons, и макет содержит четыре кнопки

  1. btnBold
  2. btnItali c
  3. btnStrike
  4. btnUnderline

и один 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 a single style

Как, когда я выбираю текст 1-10 , а затем сделайте его жирным , это работает!

но, когда я выберу другой текст, сделайте его другим, например italic, strike, underline тогда предыдущий текст становится нормальным, а новые успешно изменяются.

Я хочу, чтобы текст оставался таким же

Жду ответа!

Заранее спасибо !!

Удачного кодирования !

1 Ответ

1 голос
/ 25 мая 2020

Ваша проблема в том, что когда вы звоните 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...