Android - 不能在edittext中加注多个单词

时间:2013-02-05 12:48:17

标签: android android-edittext html bold

我有一个editText,我想在其中加粗我选择的文本。 我正在使用带有按钮的上下文操作栏来加粗选定的单词。 问题是,如果我加粗一个单词,我不能加粗其他单词,如果我从该单词中删除跨度,我就无法再添加它。 et是我编写的editText,我还使用2个SpannableString来捕获剩余的文本,保留之前添加的最终跨度。

CUSTOM CALLBACK

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;

我该如何解决? 提前谢谢。

1 个答案:

答案 0 :(得分:3)

我刚刚添加了一个RichEditText库https://github.com/kemallette/RichEditText,它添加了粗体/斜体/删除/下划线..以及其他一些字体样式功能。它还增加了许多很好的验证。

如果这不符合您的需求,您需要专注于跟踪您的跨距,它们的类型以及它们的调整/重新添加。看看上面库中的RichEditText和RichTextWatcher类。它可以让您更好地了解EditText中文本更改时实际发生的情况。