Literals 版面设计概念

在显示一段 Literals 之前,必须使用适当的字形和连字正确调整其形状和位置。此过程称为文本布局。文本布局过程涉及以下内容:

  • 使用适当的字形和连字对文本进行整形

  • 正确 OrderLiterals

  • 测量和定位 Literals

用于布置文本的信息对于执行文本操作(如插入符号定位,命中检测和突出显示)也是必需的。有关这些文本操作的更多信息,请参见使用 Double 向 Literals

要开发可在国际市场上部署的软件,必须以符合适当书写系统规则的方式以不同的语言布置文本。

本节涵盖以下主题:

Shaping Text

字形是一个或多个字符的视觉表示。字形的形状,大小和位置取决于其上下文。根据字体和样式,许多不同的字形可用于表示单个字符或字符组合。

例如,在手写草书文本中,特定字符可以根据其与相邻字符的连接方式采用不同的形状。

在某些书写系统中,尤其是阿拉伯语,必须始终考虑字形的上下文。与英语不同,草书形式是阿拉伯语的必填项;在不使用草书形式的情况下呈现文本是不可接受的。

根据上下文,这些草书形式的形状可能会根本不同。例如,阿拉伯字母* heh *具有下图所示的四种草书形式:

未连接的插图,右侧连接,两侧连接,左侧阿拉伯草书形式

尽管这四种形式彼此非常不同,但是这种草书形式的改变与英语中的草书写作在本质上并没有什么不同。

在某些情况下,两个字形可以更彻底地改变形状并合并以形成单个字形。这种类型的合并字形称为* ligature 。例如,大多数英语字体都包含连字 fi *,如下图所示:

结扎 fi

合并的字形考虑了字母* f *上的突出部分,并以自然的方式组合了字符,而不是简单地让字母碰撞。

阿拉伯语中也使用了连字,某些连字是强制性的。在不使用适当连字的情况下呈现某些字符组合是不可接受的。当用阿拉伯字符形成连字时,形状的变化甚至比英语更剧烈。例如,下图说明了两个阿拉伯字符一起出现时如何将它们组合成一个连字。

当两个阿拉伯字符一起出现时如何将它们组合成单个连字

Ordering Text

在 Java 编程语言中,使用 Unicode 字符编码对文本进行编码。使用 Unicode 字符编码的文本以“逻辑 Sequences”存储在内存中。逻辑 Sequences 是读取和写入字符和单词的 Sequences。逻辑 Sequences 不一定与视觉 Sequences相同,后者是相应字形的显示 Sequences。

特定书写系统(脚本)中字形的视觉 Sequences 称为脚本 Sequences。例如,罗马文本的脚本 Sequences 是从左到右,阿拉伯语和希伯来语的脚本 Sequences 是从右到左。

某些书写系统除脚本 Sequences 外还具有规则,用于在文本行上排列字形和单词。例如,即使字母从右到左,阿拉伯数字和希伯来数字从左到右排列。这意味着阿拉伯语和希伯来语,即使没有嵌入的英语文本,也确实是 Double 向的。有关更多信息,请参见使用 Double 向 Literals

测量和定位文本

除非使用等宽字体,否则字体中的不同字符具有不同的宽度。这意味着文本的所有定位和度量都必须准确地考虑使用哪些字符,而不只是考虑使用多少个字符。例如,要将一列以比例字体显示的数字右对齐,您不能简单地使用多余的空格来放置文本。要正确对齐列,您需要知道每个数字的确切宽度,以便可以相应地进行调整。

文本通常使用多种字体和样式显示,例如粗体或斜体。在这种情况下,即使相同的字符也可以具有不同的形状和宽度,这取决于其样式。为了正确定位,测量和渲染文本,您需要跟踪每个单独的字符*以及应用于该字符的样式。幸运的是,TextLayout类为您做到了。

为了以希伯来语和阿拉伯语等语言正确显示文本,需要对每个单独的字符进行测量并将其放置在相邻字符的上下文中。由于字符的形状和位置可能会根据上下文而变化,因此在不考虑上下文的情况下测量和定位此类文本会产生不可接受的结果。

另外,Java SE 为您提供了FontMetrics类,该类使您能够获取Font对象呈现的文本的度量,例如字体中一行文本的高度。您可以使用此信息在 Java 图形应用程序中精确定位文本。有关更多信息,请参见Measuring Text