在现代移动应用程序的界面创建中,处理文本是一项关键任务。从字体选择到字符间距调整,每个方面都会影响用户对产品的感知。根据Apple NSAttributedString 文档,正确的文本格式直接关系到界面的可读性和可访问性。
要点
NSAttributedString是iOS中处理格式化文本的基础类。它允许将属性应用于单个字符或范围:通过UIFont设置字体、通过UIColor设置颜色、通过kern设置字符间距、通过NSMutableParagraphStyle设置行间距。在移动应用中,NSAttributedString被广泛使用——从UILabel到支持编辑的复杂UITextView。
UIFont是iOS上处理字体的主要类。它支持系统字体、自定义字体和Dynamic Type。UIFont(name:size:)按名称加载字体,UIFont.systemFont(ofSize:weight:)加载系统字体。UIFontDescriptor允许修改现有字体:更改大小、粗细或添加变换矩阵。对于自定义字体,.ttf文件被添加到项目中,并在Info.plist的Fonts provided by application键下注册。
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont(name: "HelveticaNeue-Bold", size: 18) as Any,
.foregroundColor: UIColor.darkGray as Any,
.kern: 1.5 as Any
]
let attributedString = NSAttributedString(
string: "Форматированный текст",
attributes: attributes
)
label.attributedText = attributedString
NSMutableParagraphStyle是ParagraphStyle的可变版本,用于配置段落显示。它控制对齐方式(alignment)、行间距(lineSpacing)、缩进(headIndent、tailIndent)和截断模式(lineBreakMode)。ParagraphStyle对于移动设备上长文本的可读性至关重要:正确的lineSpacing可防止行合并,lineBreakMode可防止单词裁剪。paragraphSpacing设置定义段落之间的间距。
SpannableString是Android上文本格式化的主要工具。它通过Span对象机制工作,每个对象负责一个方面:StyleSpan用于粗体或斜体,ForegroundColorSpan用于颜色,URLSpan用于链接,UnderlineSpan用于下划线。SpannableStringBuilder相当于NSMutableAttributedString,允许从多个片段构建文本。理解SpannableString对于在移动应用中创建具有格式化文本的灵活界面至关重要。
Typeface是Android上处理字体的类。它支持系统字体Roboto和Noto,以及自定义字体。Typeface.createFromResource()从res/font/加载字体,Typeface.createFromAsset()从assets文件夹加载字体。Android 8.0+支持XML中的字体系列,将多个字体文件合并为一个资源。Android移动应用中文本的自定义字体通过android:fontFamily属性或通过编程方式使用setTypeface()设置。
TextMeasurer(API 29+)是一种无需绑定到View即可测量文本的现代工具。它在渲染前计算宽度、高度和字符位置。在较旧的API上,单行文本使用Paint.measureText(),多行文本使用StaticLayout。TextMeasurer在通过Canvas.drawText()绘制文本的自定义View中特别有用。正确的测量可防止界面中的字符被裁剪。
val spannable = SpannableString("Жирный текст с цветом")
spannable.setSpan(
StyleSpan(Typeface.BOLD),
0, 6,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
spannable.setSpan(
ForegroundColorSpan(Color.RED),
14, 19,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
textView.text = spannable
移动应用中的排版是字体、字符间距和行间距的综合配置。移动开发中的正确排版直接影响文本的可读性和界面的视觉感知。让我们看看两个平台上可用的关键参数。
字距调整是调整特定字符对(AV、To、Wa)之间的间距。跟踪是整个文本或部分文本的统一字符间距。在iOS上,字距调整通过NSKernAttributeName设置,在Android上则通过TextView的letterSpacing属性设置。负值使字符靠近,正值使字符分散。移动开发中的排版需要仔细调整这些参数:对于大标题,字符间距通常增加,对于正文则保持标准。
| 参数 | iOS | Android |
|---|---|---|
| 样式化字符串 | NSAttributedString | SpannableString |
| 字体 | UIFont / CTFont | Typeface |
| 字符间距 | NSKernAttributeName | letterSpacing |
| 行间距 | lineSpacing | lineSpacingExtra |
| 连字 | NSLigatureAttributeName | OpenType功能 |
| 省略号 | lineBreakMode .byTruncatingTail | android:ellipsize |
连字是替代两个或多个字符组合(fi、fl、ffi)的特殊字形。在iOS上,连字通过NSLigatureAttributeName控制:0 — 禁用,1 — 标准,2 — 所有可用。在Android上,连字通过OpenType功能在字体级别控制。启用连字可以改善文本外观,特别是在衬线字体中。移动开发中的排版主要将连字用于标题和标志。
自定义字体是为应用程序创建独特视觉风格的主要工具之一。它们有助于突出品牌并改善用户体验。在移动应用中,自定义字体用于标题、标志、强调元素和企业标识。
可变字体是一种现代字体技术,单个文件包含多种样式:从细到超粗,从窄到宽。这通过用单个文件替换多个字体文件来减小应用程序体积。在iOS上,可变字体通过带有weight参数的UIFont支持。在Android上,通过指定可变轴wght、wdth、slnt的Typeface.Builder支持。使用可变字体简化了移动应用中的排版:开发人员无需为每种样式加载单独的文件。
let customFont = UIFont(name: "CustomFont-Regular", size: 16)
let scaledFont = UIFontMetrics.default
.scaledFont(for: customFont)
label.font = scaledFont
label.adjustsFontForContentSizeCategory(true)
iOS上的NSTextAttachment允许在NSAttributedString中嵌入UIImage——图像与基线对齐并随文本移动。在Android上,相当于SpannableString内的ImageSpan。这两种方法都适用于带表情符号的聊天、带图标的新闻提要以及带自定义复选框的表单。正确缩放图像以匹配字体高度非常重要,这样文本和图形才能显得协调。
除了基本格式化之外,移动应用中的文本还支持额外的视觉效果:阴影、轮廓、删除线和下划线。这些工具扩展了排版的可能,但需要谨慎应用以保持可读性。
iOS上的文本阴影通过带有offset、blurRadius和color的NSShadow设置。轮廓通过NSStrokeWidthAttributeName设置:负值创建带有轮廓的填充,正值仅创建轮廓。删除线——NSUnderlineStyle(.single、.thick、.double)。在Android上,TextView阴影通过android:shadowRadius、android:shadowDx、android:shadowDy配置。SpannableString支持StrikethroughSpan和UnderlineSpan。Android上的文本轮廓通过OutlineSpan或自定义字体实现。
省略号是在容器溢出时用省略号截断文本。在iOS上,通过lineBreakMode .byTruncatingTail和numberOfLines配置。在Android上,通过android:ellipsize="end"和android:maxLines配置。跑马灯是一种在Android上通过android:ellipsize="marquee"可用的滚动文本动画。在iOS上没有内置的等效功能——使用MarqueeLabel库。省略号对于移动应用中所有单行文本是必需的,以避免内容被裁剪。
Dynamic Type是iOS中的一个自适应文本系统,根据用户的辅助功能设置调整字体大小。使用UIFontMetrics来缩放自定义字体。Dynamic Type对于符合辅助功能要求的应用程序是必需的。在Android上,等效的是sp单位和scaledPixels,它们根据系统文本大小设置进行缩放。
常见问题
NSAttributedString是一个iOS类,用于在字符和范围级别创建带有字体、颜色和样式属性的格式化文本。
SpannableString是一个Android类,通过Span对象(ForegroundColorSpan、StyleSpan、URLSpan、UnderlineSpan)进行文本标记。
将.ttf文件添加到项目,在Info.plist的Fonts provided by application键下指定它,然后使用UIFont(name:)。
将.ttf文件放在res/font/中,创建XML字体系列,并指定android:fontFamily或使用Typeface.createFromAsset()。
字距调整是字符对之间的间距。连字是字母组合的特殊字形。它们通过NSKernAttributeName和NSLigatureAttributeName控制。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。