我正在创建一个应该支持两种语言的应用程序,英语和希伯来语。
问题是希伯来语是从右到左的西方语言,英语是从左到右的语言,而LibGDX不支持RTL字体。
我已经为字体创建了位图,一切正常
但是当我用希伯来语写作时,它会写出反转的字样。当我单独用希伯来语写作时,我有一个解决方案,只需用StringBuilder
反转单词,但这是一个便宜的修复。但是,如果我想实现聊天或角色名称呢?
答案 0 :(得分:5)
从我能看到的最简单的解决方案是使用Heiro。如果你看一下这个线程Hiero Rendering Arabic fonts Right to Left哪里有最近的条款来容纳RTL
从那里变得越来越困难。关于这个问题有很多问题(一个例子Showing non-western language from right to left in libgdx (Android))和更少的解决方案。
您可以选择为常用的单词或表达式创建字符串的字形库,尽管这是一个艰苦的设置过程,并且在使用聊天时会产生开销,就像您的字符串一样逆转。
libgdx github Support for complex font rendering (Chinese, Arabic, ...)中的讨论。进入这些以及更多选项,包括支持Windows sridharsundaram/complexscriptlayout所做的工作,虽然这不是Android,但可能值得研究进一步的开发思路。
从积极的方面来看,这方面的近期发展越来越多,因此对于使用libgdx的开发人员来说,RTL和bidi格式会变得越来越容易。
感兴趣的是这个支持问题Right-To-Left Text Rendering Support #787,因为存在开发资源相同问题的人的痕迹痕迹。
答案 1 :(得分:1)
到目前为止,还没有一种方法可以呈现从右到左的文本,如this线程所示。因此,真正做到这一点的唯一方法是使用StringBuilder
反转文本,然后显示该文本。渲染反转文本的一种更有效的方法是创建一个相应显示文本的方法,这样每次尝试编写“从右到左”文本时都不必反转它。如果创建方法,则可以将RTL文本实现为需要RTL字体的聊天,名称或其他图形。
我还建议您将位图转换为 .ttf 文件,以便在保持高质量的同时轻松使用自定义字体。然后,您可以使用FreeTypeFontGenerator
很好地渲染字体。如果您无法将Bitmap
转换为字体,则还可以使用以下方法显示文字的方法。 Hiero库是一个非常好的选择。您可以选中RTL文本复选框。
以下是您可以创建的用于呈现文本的方法的示例(使用FreeTypeFontGenerator
):
// Keep the generator here so that it is not created each time
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fontFile.ttf"));
public void renderRTL(float x, float y, int fontSize, String text) {
batch.begin(); // Lets you draw on the screen
// Reverses the text given
StringBuilder builder = new StringBuilder();
builder.append(text);
builder.reverse();
String outputText = builder.toString();
// Creates the font
FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
parameter.size = fontSize;
parameter.characters = "ALL HEBREW CHARACTERS"; // Put all your Hebrew characters in this String
scoreFont = generator.generateFont(parameter);
scoreFont.setColor(Color.BLACK);
scoreFont.draw(batch, outputText, x, y); // Actually draws the text
generator.dispose(); // Clears memory
batch.end();
}
确保将所有这些依赖项添加到build.gradle
文件中(在依赖项部分中):
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
您可以选择将颜色参数(RGBA格式)添加到方法中以获得更多功能。希望它有所帮助!
答案 2 :(得分:0)