You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何获取EditText焦点所在单词并添加/移除加粗效果?

实现EditText指定单词的加粗/取消加粗效果

完全可以实现,核心是利用EditText的Spannable富文本特性,结合光标位置定位目标单词,再动态添加或移除加粗样式,具体步骤如下:

  • 定位目标单词:当光标停在目标单词上时,通过光标位置向前、向后遍历文本,找到单词的起始和结束索引(以空格或文本边界为分隔)。
  • 判断当前样式:获取EditText的SpannableString内容,通过getSpans()方法检查目标单词范围内是否存在StyleSpan(Typeface.BOLD)样式。
  • 切换加粗状态:如果已加粗,调用removeSpan()移除对应的StyleSpan;如果未加粗,调用setSpan()添加加粗样式。

示例代码

以下是按钮点击事件的核心处理逻辑:

boldButton.setOnClickListener {
    val editText = findViewById<EditText>(R.id.your_edittext)
    val spannable = editText.text as Spannable
    val cursorPos = editText.selectionStart

    // 定位当前单词的start和end索引
    var start = cursorPos
    while (start > 0 && spannable[start - 1] != ' ') {
        start--
    }
    var end = cursorPos
    while (end < spannable.length && spannable[end] != ' ') {
        end++
    }

    // 检查是否已加粗并移除现有样式
    var isBold = false
    val existingSpans = spannable.getSpans(start, end, StyleSpan::class.java)
    existingSpans.forEach { span ->
        if (span.style == Typeface.BOLD) {
            isBold = true
            spannable.removeSpan(span)
        }
    }

    // 未加粗则添加样式
    if (!isBold) {
        spannable.setSpan(StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
    }
}

注意事项

  • 确保EditText的inputType未设置为textPassword等不支持富文本的类型,常规text或textMultiLine均可。
  • 上述代码已支持连续点击切换加粗/取消加粗状态。

内容的提问来源于stack exchange,提问作者user19516326

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:50:32