0

選択したテキストを太字にしたい 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;

どうすれば解決できますか?前もって感謝します。

4

1 に答える 1