android - 如何在edittext中以编程方式正确更改字体?
问题描述
我正在尝试创建一个基本的文本编辑器。我几乎实现了我想做的事情,但存在一些问题。当我按下“B”按钮时,它会使文本变为粗体。如果我继续写而不给空间并再次按“B”按钮,我写的所有字母都会正常。但我想保持已经粗体的字母粗体。当我给空间时,它会按我的意愿工作,变为粗体、斜体或正常。以下是我的代码的一些部分:
editor.textChangedListener {
beforeTextChanged { _, _, _, _ ->
val length = editor.text?.length
length?.let {
if (it > 0) {
val styleSpan = when {
isBold && isItalic -> StyleSpan(Typeface.BOLD_ITALIC)
isBold && !isItalic -> StyleSpan(Typeface.BOLD)
!isBold && isItalic -> StyleSpan(Typeface.ITALIC)
else -> StyleSpan(Typeface.NORMAL)
}
val spannable = Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
if (it < start) start = 0
editor.text?.setSpan(styleSpan, start, it, spannable)
}
}
}
}
boldButton.onClick {
isBold = !isBold
val image = when (isBold) {
true -> R.drawable.ic_bold_active
false -> R.drawable.ic_bold
}
start = editor.text!!.length
boldButton.setImageResource(image)
}
解决方案
要更改字体,您可以使用类似这样的东西。
TextView tv = (TextView) findViewById(R.id.tvname);
Typeface face = Typeface.createFromAsset(getAssets(),
"fonts/epimodem.ttf");
tv.setTypeface(face);
你也可以尝试 html 相同的
textView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>", Html.FROM_HTML_MODE_COMPACT));
推荐阅读
- javascript - AWQL / Apps 脚本 WHERE 日期日期名称等于今天的日期名称
- mysql - 我正在设置 ambari-server ,但它说我需要设置 MySQL 驱动器?
- groovy - 无法访问 groovy 闭包中的局部变量
- javascript - 在我正在构建的包中,如何将由 promise 创建的错误的处理留给包的消费者?
- prestashop-1.6 - 启动事务、提交和回滚 Prestashop 1.6
- c# - 在循环中绑定事件处理程序
- javascript - 由于 angular-block-ui 库,自动完成失去焦点
- url - Requests.get 为我的 URL 提供错误的状态码
- javascript - 制作只读对象包装器万无一失
- javascript - 获得真正的 p 宽度