【问题标题】:TextView with mixed languages混合语言的 TextView
【发布时间】:2015-03-23 20:21:58
【问题描述】:

我有一个TextView,有 2 行。第一行 rtl 语言(比如说希伯来语),第二行是 ltr 语言(比如说英语)

View 结果是类似

       אחת שתיים שלוש
one two three

我想要什么:在这种情况下对齐 rtl

       אחת שתיים שלוש
          one two three

我尝试过将setTextDirection()TEXT_DIRECTION_FIRST_STRONG 一起使用 但结果是一样的。也试过TEXT_ANY_RTL没有成功

myTextView.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG);

如果我使用TEXT_DIRECTION_RTL,它会按预期工作,但这并不是真正的解决方案,因为大多数时候TextView 将只包含一种语言。

这可以解决吗?

--- 更新 ---

我如何填充TextView

SpannableStringBuilder ssb = new SpannableStringBuilder(titleText);
int end = titlText.length();
ssb.append("\n").append(otheText);
ssb.setSpan(new AbsoluteSizeSpan(size), end, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ssb);

【问题讨论】:

  • 嗯...你是如何填充这个TextView的?你在使用LocaleSpan 还是什么? IOW,TextView 如何知道文本是一种、两种或 30 种语言?
  • 我正在使用SpannableStringBuilder。我已经更新了这个问题。 titleTextotherText 可能是也可能不是同一种语言。
  • 我希望 TEXT_DIRECTION_FIRST_STRONG 能够解决问题,因为 第一个强方向字符决定段落方向文档行
  • titleTextotherText的实现是什么Java类? String?如果是,我不知道TextView 为何或如何将它们放在具有单独 RTL/LTR 设置的单独行上。如果不是,那它们是什么?
  • 它们属于String 类。单独的行是因为我还附加了\n...ssb.append("\n").append(otheText);

标签: android textview right-to-left


【解决方案1】:

为什么不只使用两个 TextView?

【讨论】:

  • 因为结果是一样的。上面的textView 将具有 rtl 方向,底部的将具有 ltr 方向。也因为对于我的使用,TextView 有一个渐变,将其拆分为 2 将是一个问题。最后,因为这对我来说真的很有趣,为什么 TEXT_DIRECTION 不起作用,我该如何解决这个问题
【解决方案2】:

我已经设法使用Character.getDirectionality 解决了这个问题。

作为定向字符的第一个字符将表示TextView 方向

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public static int getTextDirection(String text) {
    final int length = text.length();
    for (int i = 0; i < length; i++) {
        final char c = text.charAt(i);
        final byte directionality = Character.getDirectionality(c);

        if(directionality == Character.DIRECTIONALITY_LEFT_TO_RIGHT){
            return View.TEXT_DIRECTION_LTR;
        }
        else if(directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT){
            return View.TEXT_DIRECTION_RTL;
        }
    }

    return View.TEXT_DIRECTION_ANY_RTL;
}

然后:

textView.setTextDirection(textDirection);

我坚信 TEXT_DIRECTION_FIRST_STRONG 根据文档应该做同样的事情。可惜不是这样的。

我不接受我的回答,希望有人能提出更好的解决方案

【讨论】:

    【解决方案3】:

    TEXT_DIRECTION_ANY_RTL

    此文本方向使用“any-RTL”算法。如果段落方向包含任何强 RTL 字符,则为 RTL,否则如果包含任何强 LTR 字符,则为 LTR。如果两者都没有,则段落方向是视图的解析布局方向。

    【讨论】:

    • 感谢您的回答。可悲的是我已经尝试过了,但它不起作用
    猜你喜欢
    • 2015-04-29
    • 1970-01-01
    • 2022-01-10
    • 2011-08-18
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多