我有一个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;
我该如何解决? 提前谢谢。
答案 0 :(得分:3)
我刚刚添加了一个RichEditText库https://github.com/kemallette/RichEditText,它添加了粗体/斜体/删除/下划线..以及其他一些字体样式功能。它还增加了许多很好的验证。
如果这不符合您的需求,您需要专注于跟踪您的跨距,它们的类型以及它们的调整/重新添加。看看上面库中的RichEditText和RichTextWatcher类。它可以让您更好地了解EditText中文本更改时实际发生的情况。