我目前正试图在我的应用程序中创建菜单项,当按下编辑文本时,该菜单项会使突出显示的文本变为粗体。目前,该按钮可以工作,但每次按下该按钮时都会删除以前的粗体文本。
使文本加粗的代码。
fun makeTextBold(editText: EditText) {
val wholeText = editText.text.toString()
val start = editText.selectionStart
val end = editText.selectionEnd
val ssb = SpannableStringBuilder(wholeText)
ssb.setSpan(StyleSpan(Typeface.BOLD),start,end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
editText.text = ssb
}
菜单项的代码。
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.action_bold -> makeTextBold(characterNotesEditText)
}
return true
}
因此,如果文本当前如下
我想用粗体显示"文本"one_answers"像这样",它将改为:
因此,如果文本当前类似于此
代替:
因此,如果文本当前为,则
我知道这可能是因为我每次点击按钮都会创建一个新的SpannableStringBuilder,但我很难找到解决这个问题的方法,如果有任何帮助,我将不胜感激。
在editText.text
上直接调用setSpan
,而不是每次都创建一个新的SpannableStringBuilder
fun makeTextBold(editText: EditText) {
val wholeText = editText.text
val start = editText.selectionStart
val end = editText.selectionEnd
wholeText.setSpan(StyleSpan(Typeface.BOLD),start,end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
}