gpt4 book ai didi

android - 如何在较旧的 Android 版本上正确呈现 RTL 文本

转载 作者:行者123 更新时间:2023-11-29 17:52:13 25 4
gpt4 key购买 nike

我使用谷歌翻译将以下字符串“我认为 CompanyXYZ 在 2014 年及以后是一家伟大的公司”翻译成希伯来语,结果是 enter image description here

当我在 Galaxy S3 (Android 4.3) 的 TextView 中显示此文本时,我得到 enter image description here

这似乎是正确的。

当我在 Galaxy Tab 7(运行 Android 2.2)上运行相同的程序时,我得到 enter image description here

这显然是不正确的。

我可以使用 android.support.v4.text.BidiFormatter 和/或 java.text.Bidi 来正确渲染吗?
当运行以下代码时

    Bidi bidi = new Bidi(text, Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
for (int i = 0; i < bidi.getRunCount(); i++)
{
int start = bidi.getRunStart(i);
int level = bidi.getRunLevel(i);
int limit = bidi.getRunLimit(i);
Log.d("RTL", "bidi.run["+i+"] = "+start+";"+level+";"+limit+";"+ text.substring(start, limit));
}

我确实得到了以下 5 次运行

bidi.run[0] = 0;1;9;אני חושב 
bidi.run[1] = 9;2;19;CompanyXYZ
bidi.run[2] = 19;1;36; היא חברה גדולה ב
bidi.run[3] = 36;2;40;2014
bidi.run[4] = 40;1;46; ומעבר

因此,所有信息似乎都可用于正确呈现此字符串,但我不知道如何继续。我可以使用 BidiFormatter 吗?或者我应该覆盖 TextView.draw() 吗?

最佳答案

好吧,我意识到已经有一段时间了......

我为我的应用程序创建了一个函数,它根据我认为有用的主要方向获取双向字符串。

public static String getBidiString(String input, int direction) {
boolean rtlContext;
int defaultBidiDirection;
if (direction == Bidi.DIRECTION_LEFT_TO_RIGHT) {
rtlContext = false;
defaultBidiDirection = Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT;
} else /* if (lang == Util.Lang.HE) */{
rtlContext = true;
defaultBidiDirection = Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT;
}

Bidi bidi = new Bidi(input,defaultBidiDirection);
if (!bidi.isMixed()) return input;



BidiFormatter bidiFormatter = BidiFormatter.getInstance(rtlContext);
StringBuilder bidiTestBuilder = new StringBuilder();
for (int i = 0; i < bidi.getRunCount(); i++)
{
int start = bidi.getRunStart(i);
int level = bidi.getRunLevel(i);
int limit = bidi.getRunLimit(i);
String run = input.substring(start, limit);

if (level != direction) {
run = bidiFormatter.unicodeWrap(run,!rtlContext) + " ";
}
bidiTestBuilder.append(run);
}

return bidiTestBuilder.toString();
}

direction 参数应为 Bidi.DIRECTION_LEFT_TO_RIGHTBidi.DIRECTION_RIGHT_TO_LEFT,具体取决于文本的默认方向。

我当然不是说我完全正确地实现了这个,但这段代码适用于我的用例。

关于android - 如何在较旧的 Android 版本上正确呈现 RTL 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22093695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com