Android - не может выделять больше слова в тексте редактирования

У меня есть editText, в котором я хочу выделить текст, который я выбираю. Я использую контекстную панель действий с кнопкой, чтобы выделить выбранное слово жирным шрифтом. Проблема в том, что если я выделяю слово жирным шрифтом, я не могу выделить другое слово, а если я удаляю интервал из этого слова, я не могу добавить его снова. et - это editText, в котором я пишу, и я также использую 2 SpannableString, чтобы поймать оставшийся текст, сохраняя возможные диапазоны, добавленные ранее.

ПОЛЬЗОВАТЕЛЬСКИЙ ОБРАТНЫЙ ЗВОНОК

cs1 = new StyleSpan(Typeface.BOLD);

class CustomCallback implements ActionMode.Callback {
public boolean onCreateActionMode(ActionMode mode, Menu menu) {

    //exploiting the CAB

    MenuInflater inflater = mode.getMenuInflater();
    inflater.inflate(R.menu.context_menu, menu);
    menu.removeItem(android.R.id.selectAll);
    return true;
}

public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
    return false;
}

ДЕЙСТВИЕ ДОБАВИТЬ ЖИРНЫМ

public boolean onActionItemClicked(ActionMode mode, MenuItem item) {


    int start = et.getSelectionStart();
    int end = et.getSelectionEnd();




    SpannableStringBuilder s_before,s_next;

    SpannableStringBuilder ssb = new SpannableStringBuilder(et.getText().subSequence(start, end));
    s_before= new SpannableStringBuilder (et.getText().subSequence(0, start));
    s_next= new SpannableStringBuilder (et.getText().subSequence(end, et.length()));



    switch(item.getItemId()) {


    case R.id.bold:

        int a=ssb.getSpanStart(cs1);
        int b=ssb.getSpanEnd(cs1);


        if(a==-1 && b==-1){

            ssb.setSpan(cs1, 0, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        else{
            ssb.removeSpan(cs1);
        }
        et.setText("");
        et.append(s_before);
        et.append(ssb);
        et.append(s_next);

        return true;

Как я могу это решить? Заранее спасибо.


person e_ori    schedule 05.02.2013    source источник


Ответы (1)


Я только что добавил библиотеку RichEditText https://github.com/kemallette/RichEditText, которая добавляет жирный шрифт/ курсив/зачеркивание/подчеркивание... и некоторые другие функциональные возможности стилей шрифтов. Это также добавляет кучу отличных проверок.

Если это не соответствует вашим потребностям, вам нужно сосредоточиться на отслеживании того, где находятся ваши промежутки, какого они типа и что они корректируются/повторно добавляются. Взгляните на классы RichEditText и RichTextWatcher в приведенной выше библиотеке. Это даст вам лучшее представление о том, что на самом деле происходит, когда текст изменяется в вашем EditText.

person KMDev    schedule 22.04.2013