Android不能正确支持Urdu Nastaliq
字体(单词被分解,并且没有单词的确切形状(Nastaliq))。
我使用Typeface作为
TextView tx=(TextView)this.findViewById(R.id.tt);
tx.setTypeface(Typeface.createFromAsset(getAssets(),"TTF font Path"));
我可以使用AWT软件包在
中获取Java中Nastaliq字体的确切格式Font font = Font.createFont(Font.TRUETYPE_FONT, new File("Path for ttf file"));
Font dynamicFont32Pt = font.deriveFont (32f);
JLabel textLabel = new JLabel(textMessage);
textLabel.setFont(dynamicFont32Pt);
但Android也不支持AWT包正确(java.awt.Font.createFont()
和deriveFont()
),所以我们决定为乌尔都语的.ttf文件制作一个渲染引擎。
现在我的问题是 -
答案 0 :(得分:2)
Extracting glyph-path information from ttf files问题的答案可能让您感兴趣:基本上,它指向Batik库,它具有用Java解析TTF文件的代码(将其转换为SVG)。
答案 1 :(得分:0)
您应该检查我的问题How to use kerning pairs extracted from a TTF file to correctly show glyphs as Path2D in Java?。建议不要使用蜡染,而是使用Apache FOP。它简单易用。优点是您只读取一次字体,并将字形嵌入到应用程序中。但是,Apache FOP仅适用于TTF,不适用于OTF(也可以,但我仍在努力)。 Batik使用Java AWT渲染字符串。问题是您的应用程序每次运行时都需要读取字体文件。在这种方法中,我建议您可以使用嵌入式的迷你矢量化字体,也可以对小文本使用嵌入式的矢量化字符串。这种方法的问题是,宽度仅在绘制时才能正常工作。为了能够使用通过awt从字体文件中恢复的字形,您需要直接从文件中读取字距调整对和宽度,以便能够正确显示文本。 question的答案对此进行了解释。同时检查问题How to read kerning pairs table from TTF file in Android?。使用矢量化字形的优点是您的应用程序独立于字体文件和操作系统。
您可以看到我在Windows上使用此系统,但对于Android也可以这样做。字体在Windows上更易于处理,大多数字体都有TTF。实际上,您可以在Windows上开发矢量字体,而仅在Android中使用生成的类。这就是这种方法的优点。我使用println
生成字体并将其复制并粘贴到新的类文件中。我什至不用去写文件。