首页 > 解决方案 > 你如何在android studio中制作一个使文本变粗的菜单项

问题描述

我目前正在尝试在我的应用程序中创建 menuitem,当它被按下时,它会使 edittext 的突出显示文本变为粗体。目前,该按钮有效,但每次按下该按钮时它都会删除先前的粗体文本。

使文本加粗的代码。

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
}

所以如果文本当前是这样的

我想加粗“文本”和“像这样”,它会变成:

所以如果文本当前是这样的

代替:

所以如果文本当前是这样的

我知道这可能是因为我每次单击按钮时都会创建一个新的 SpannableStringBuilder ,但我正在努力寻找解决该问题的方法 - 任何帮助将不胜感激。

标签: androidandroid-studiokotlinandroid-edittext

解决方案


setSpan直接调用而不是每次都editText.text新建一个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)
}

推荐阅读