TextView与混合语言

时间:2015-03-23 20:21:58

标签: android textview right-to-left

我有一条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);

3 个答案:

答案 0 :(得分:1)

为什么不使用两个TextView?

答案 1 :(得分:1)

我设法使用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应该根据文档做同样的事情。可悲的是,事实并非如此。

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

答案 2 :(得分:0)

TEXT_DIRECTION_ANY_RTL

怎么样?

此文字方向正在使用&#34; any-RTL&#34;算法。段落方向是RTL,如果它包含任何强RTL字符,否则它是LTR,如果它包含任何强LTR字符。如果两者都没有,则段落方向是视图已解析的布局方向。