android - 你如何在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 ,但我正在努力寻找解决该问题的方法 - 任何帮助将不胜感激。
解决方案
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)
}
推荐阅读
- javascript - 按下按钮时其他页面上的div内容脚本问题
- python - Python SocketIO KeyError:'会话已断开'
- javascript - Fabric.JS 组选择区
- python - Readthedocs 添加 html_logo 导致类型错误
- javascript - 在构建后更改环境变量
- python - Python Socket - 最后一个符号丢失
- c++ - 如何在未输入但基于先前变量值设置的结构变量中创建变量
- tailwind-css - 如何使用 tailwind css 导入 CSS?
- python - 将日期时间附加到列表
- mysql - 将 Heroku 部署的 MySQL 数据库连接到 Django