Bold Text — 一项辅助功能,它将操作系统界面所有元素中的标准字体外观替换为粗体。在iOS中,该设置位于“设置”>“显示与亮度”>“粗体文本”中,应用后需要重启设备。在Android中,根据版本不同,类似功能被称为“增强可读性”或“高对比度文本”。根据W3C WAI的数据,粗体文本可使视力障碍人士的可读性提高20–25%。
要点
Bold Text — 是操作系统的一项系统设置,它规定界面中的所有文本元素使用粗体字体而不是标准字体(regular或normal)。与简单地增大字体大小不同,粗体文本不改变缩放比例——它增加字母线条的粗细,使其在背景上更加饱和和对比鲜明。
该功能属于 显示辅助功能 类别——帮助视力障碍人士更舒适地感知信息的屏幕设置。粗体文本在低视力(弱视)、年龄相关性远视(老花眼)以及某些形式的阅读障碍(其中字母在标准粗细下会“重影”或“漂浮”)时特别有效。
粗体字体提高 可读性 — 单个字符的识别速度和准确性。Usability.gov的研究表明,与相同尺寸的常规字体相比,粗体可将视力障碍用户的阅读准确性提高12–18%。粗体文本不能替代文本放大——两种功能可以组合使用。
Bold Text 与 Dynamic Type(iOS)或 Font Size(Android)之间的关键区别——作用机制不同。字体放大改变字母的大小,而粗体文本只改变粗细。字体放大时,屏幕容量会降低(一个屏幕上容纳的内容更少),粗体文本则保持可见元素的数量。对于早期老花眼的用户,粗体文本通常在不放大的情况下就足够了。
| 参数 | Bold Text | 字体放大 |
|---|---|---|
| 改变粗细 | 是 | 否 |
| 改变大小 | 否 | 是 |
| 影响屏幕容量 | 最小 | 显著 |
| 需要重启(iOS) | 是 | 否 |
| 网页支持(CSS) | font-weight: bold | font-size |
Bold Text 的主要目标受众——患有弱视(眼镜无法矫正的视力下降)、老花眼(40–45岁后的年龄相关性远视)以及某些形式的阅读障碍的人。该功能在强烈阳光下阅读时也很有用——粗体字体在眩光时保持对比度。VoiceOver和TalkBack等辅助技术与粗体文本无关——该设置仅影响视觉显示。
在 iOS 中,粗体文本是最古老的辅助功能之一,出现在iOS 7(2013)中。该设置位于“设置”>“显示与亮度”>“粗体文本”中,需要重启iPhone:系统会重建系统应用程序(设置、邮件、信息、日历、备忘录)以及使用系统字体San Francisco的第三方应用程序中的所有字体。
从技术上讲,iOS 在CoreText框架级别将San Francisco系统字体文件替换为其粗体变体(SF Pro Bold / SF Pro Rounded Bold)。启用粗体文本后,屏幕上的所有行——从导航标题到按钮文本——都以font-weight 700而不是400显示。开发人员无法为系统元素覆盖此行为,但可以通过Dynamic Type管理其自己界面中的字体。
对于 开发人员,启用粗体文本意味着所有具有textStyle(.body、.headline、.caption等)的UIFont都会自动获得粗体外观。UIFontWeight有两种变体:regular(0.0)和bold(1.0)。在粗体文本激活时,系统为每种样式将fontWeight增加0.3–0.5。可以通过UIAccessibility.isBoldTextEnabled检查状态。
开发人员可以检查设备上是否启用了 Bold Text 并调整界面。例如,如果表格标题已经使用了粗体,在功能启用时可能需要降低粗细以避免视觉杂乱。检查代码使用UIAccessibility框架。
import UIKit
class BoldTextManager {
// 检查粗体文本状态
static var isBoldTextEnabled: Bool {
return UIAccessibility.isBoldTextEnabled
}
// 根据粗体文本调整字体
static func adjustedFont(
textStyle: UIFont.TextStyle,
weight: UIFont.Weight
) -> UIFont {
let baseFont = UIFont.preferredFont(
forTextStyle: textStyle
)
guard isBoldTextEnabled else {
return baseFont
}
// 降低粗细以避免双重加粗
let adjustedWeight: UIFont.Weight
switch weight {
case .bold, .heavy:
adjustedWeight = .semibold
case .semibold:
adjustedWeight = .medium
default:
adjustedWeight = weight
}
return UIFont.systemFont(
ofSize: baseFont.pointSize,
weight: adjustedWeight
)
}
// 支持粗体文本的缓存字体
static func labelFont() -> UIFont {
return adjustedFont(
textStyle: .body,
weight: .regular
)
}
}
// 订阅粗体文本更改通知
NotificationCenter.default.addObserver(
self,
selector: #selector(boldTextStatusChanged),
name: UIAccessibility.boldTextStatusDidChangeNotification,
object: nil
)
@objc func boldTextStatusChanged() {
// 粗体文本更改时更新界面
updateFonts()
}BoldTextManager 类检查isBoldTextEnabled,调整字体重量(在功能激活时将heavy/bold降低为semibold/medium),并订阅boldTextStatusDidChangeNotification通知。这可以防止double-bold效应,即开发人员已经为标题使用了粗体,而系统进一步加粗它们。
粗体文本影响 UITableView 和 UICollectionView 单元格的布局,因为字体粗细的增加可能会改变行高。使用self-sizing cells(estimatedRowHeight + UITableView.automaticDimension)时,iOS会在字体更改时自动重新计算高度。对于固定单元格高度,开发人员需要在收到boldTextStatusDidChangeNotification通知后调用reloadData(),否则文本可能会被截断。
在 Android 中,粗体文本功能在设置界面中称为“增强可读性”(Improve readability),位于“辅助功能”(Accessibility)部分。在某些Android版本中,尤其是在Samsung One UI设备上,该功能称为“高对比度文本”或High Contrast Text。该设置适用于所有系统元素和大多数第三方应用程序。
Android 的技术实现与iOS不同:Android不是替换系统字体,而是通过Resources.Theme在系统级别覆盖Typeface。激活设置后,系统更改所有文本元素的android:textStyle属性,设置为bold或italic+bold。开发人员可以通过Settings.Global.getFloat()或AccessibilityManager检查状态。
在 Android 中没有与UIAccessibility.isBoldTextEnabled直接等效的API。检查通过ContentResolver和Settings.System进行。该功能作为font_weight_adjustment存储在全局设置中。对于Jetpack Compose,可通过LocalDensity和fontScale访问。
import android.content.Context
import android.provider.Settings
import android.util.TypedValue
import androidx.compose.ui.text.font.FontWeight
class AndroidBoldTextHelper {
// 通过系统设置检查增强可读性
fun isBoldTextEnabled(context: Context): Boolean {
return try {
Settings.System.getInt(
context.contentResolver,
"font_weight_adjustment"
) == 1
} catch (e: Settings.SettingNotFoundException) {
false
}
}
// Jetpack Compose — 调整FontWeight
fun adjustFontWeight(
context: Context,
original: FontWeight
): FontWeight {
if (!isBoldTextEnabled(context)) return original
return when (original) {
FontWeight.Bold, FontWeight.ExtraBold -> FontWeight.SemiBold
FontWeight.SemiBold -> FontWeight.Medium
else -> original
}
}
// XML View — 通过TypedValue应用
fun applyBoldStyleFix(context: Context, textView: android.widget.TextView) {
if (isBoldTextEnabled(context)) {
val paint = textView.paint
val fakeBold = paint.isFakeBoldText
// 如果系统已启用则减少fakeBold
if (fakeBold) {
paint.isFakeBoldText = false
textView.invalidate()
}
}
}
}AndroidBoldTextHelper 类读取系统设置font_weight_adjustment,调整Jetpack Compose中的FontWeight,并删除XML View中的重复fakeBold。与iOS不同,Android不提供粗体文本更改的通知渠道——开发人员在Activity启动时或通过ContentObserver检查设置。
为了在运行时跟踪 Bold Text 的更改,Android开发人员可以使用ContentObserver。当font_weight_adjustment设置更改时,系统会通知ContentResolver,应用程序可以更新界面。这对于必须立即响应用户设置更改的AccessibilityService和自定义启动器非常重要。
在Web开发中,字体粗细由 font-weight CSS属性控制,值从100(细体)到900(黑体)。标准值:normal = 400,bold = 700。操作系统中的粗体文本不会直接影响CSS font-weight——Web浏览器在CSS级别不会收到有关启用粗体文本的系统信号。但是,如果平台支持,开发人员可以使用CSS媒体功能。
对于 iOS,Safari支持-webkit-text-size-adjust媒体功能,但没有针对粗体文本的直接媒体查询。在 Android 上,Chrome也不为粗体文本的系统设置提供媒体查询。建议Web开发人员使用prefers-contrast和prefers-reduced-motion进行适配,对于粗体文本,则通过User-Agent或后备样式检查设置。
Variable Fonts(OpenType字体变体)允许通过CSS font-weight在1–999范围内以1为步长平滑调整字体粗细。与仅提供离散值(400、700)的标准字体不同,可变字体允许为每个用户选择最佳粗细。在辅助功能设置中,可以使用更宽的范围。
/* 具有平滑粗细调节的可变字体 */
@font-face {
font-family: "Inter Variable";
src: url("/fonts/Inter-Variable.woff2")
format("woff2-variations");
font-weight: 100 900;
font-stretch: 50% 200%;
}
/* 通过类适应系统粗体文本 */
.bold-text-enabled {
--font-weight-body: 500;
--font-weight-heading: 700;
}
.bold-text-enabled .text-body {
font-weight: var(--font-weight-body);
}
.bold-text-enabled .text-heading {
font-weight: var(--font-weight-heading);
}
/* prefers-contrast: more — 后备方法 */
@media (prefers-contrast: more) {
.content {
--font-weight-increase: 100;
}
.content .text {
font-weight: calc(
var(--font-weight-base) +
var(--font-weight-increase)
);
}
}在 CSS 示例中,展示了可变字体Inter Variable的连接、用于控制粗细的CSS变量以及通过prefers-contrast: more进行的适配。可变字体允许在系统粗体文本激活时将font-weight增加50–100单位而不损失渲染质量。为了在客户端确定粗体文本的状态,可以使用User-Agent的JavaScript检查以及html元素上的类。
由于 CSS 不提供针对粗体文本的直接媒体查询,Web开发人员使用JavaScript:创建一个带有已知字体的不可见元素,测量其宽度,更改font-weight并比较差异。如果差异大于预期——系统粗体文本可能已激活。此方法用于辅助功能库中的自动样式调整。
Bold Text 解决了视力障碍用户的具体问题:提高弱视时符号的可区分性,减少长时间阅读时的视觉疲劳,并补偿强烈阳光下显示器的低对比度。根据WebAIM Million(2025)的数据,12.3%的页面文本对比度不足——粗体文本可以在用户侧部分补偿这一缺陷。
对于 开发人员,对粗体文本的支持属于WCAG 2.2的要求:标准1.4.1(颜色的使用)和1.4.3(最小对比度)。应用程序必须在启用系统粗体文本设置的情况下正确显示,不丢失内容、不重叠元素、不截断文本。在准备发布到App Store和Google Play时,必须使用启用的粗体文本进行测试。
使用 Bold Text 测试应用程序时检查:所有文本元素是否完整显示(不截断),粗细是否重复(double-bold),表格中的单元格高度是否正确重新计算,元素是否相对移动。使用Accessibility Inspector(Xcode)或Accessibility Scanner(Android)自动检测粗体文本问题。
现代 iOS 和 Android 正在朝着更精细的设置方向开发粗体文本:iOS 18(2024)增加了按应用程序的字体设置(包括粗细),Android 16(2025)为开发人员扩展了font_weight_adjustment API。预计未来版本将为Web开发人员提供针对粗体文本的CSS媒体查询,从而消除对JavaScript检测的需求。
常见问题
Bold Text 在iOS中是一项辅助功能,它将系统字体替换为界面所有元素中的粗体。在“设置”>“显示与亮度”>“粗体文本”中开启。开启后需要重启iPhone。该功能影响使用标准San Francisco字体的系统应用程序和第三方应用程序。
要检查iOS中的粗体文本,使用返回Bool的静态属性 UIAccessibility.isBoldTextEnabled。要跟踪更改,请订阅UIAccessibility.boldTextStatusDidChangeNotification通知。更改时,更新界面中的字体——为表格调用reloadData(),为自定义视图调用invalidateIntrinsicContentSize()。
在 Android 中,粗体文本的类似功能称为“增强可读性”,位于“设置”>“辅助功能”>“文本”>“增强可读性”。在Samsung One UI设备上,该功能称为“高对比度文本”。该设置更改系统Typeface,加粗界面所有元素和第三方应用程序中的字体。
CSS font-weight — 控制字体粗细的网页属性(normal = 400,bold = 700)。系统粗体文本不会直接传递到CSS——没有针对此信号的媒体查询。Web开发人员使用JavaScript通过测量字体宽度进行检测,或使用CSS函数prefers-contrast: more作为间接替代。
Bold Text 改善弱视、老花眼和阅读障碍患者的可读性。粗体字体在不改变文本大小的情况下增加屏幕上符号的对比度。该功能补偿显示器在阳光下的低对比度,并减少长时间阅读时的视觉疲劳。粗体文本是WCAG 2.2确保辅助功能建议的一部分。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。