Nic*_*ckF 5 java android locale bidi bidirectional
我有一个ListView自定义View我有一个TextView:
<TextView
android:id="@+id/textViewItemTitle"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="right|center_horizontal"
android:text="title" />
Run Code Online (Sandbox Code Playgroud)
这TextView包含希伯来文.
if(!bidi.isRtl(event)){
event = bidi.unicodeWrap(event);
}
holder.title.setText(String.format("%s %s %s", bidi.unicodeWrap(item.getStartTimeNoDate().trim()), event,
bidi.unicodeWrap(item.getDuration().trim())));
Run Code Online (Sandbox Code Playgroud)
第一个参数是时间hh:mm:ss,second(event)是希伯来字符串,第三个是第一个.
问题: 有时候事件String包含希伯来语和英语的混合文本,就像abc-???所有文本的行为都像重力一样(并且不像我在文本视图中定义的那样),我的意思是向左缩进.
怎么解决?
Y.S*_*Y.S 10
当文本在文本中时,接受的答案将完成工作TextView.
可能存在混合语言文本不在a中显示的情况TextView.例如,文本可以在共享中传递Intent给Gmail或WhatsApp等.在这种情况下,您必须使用以下类的组合:
正如文档中引用的,这些是......
用于格式化文本的实用程序类[es],用于在可能相反的方向性上下文中显示而不会出现乱码.在格式化器创建时设置上下文的方向性,并且可以在已知时估计或传递文本的方向性.
例如,假设你有一个String英语和阿拉伯语的组合,你需要文本
然后你可以使用unicodeWrap()如下方法实现这一点:
String mixedLanguageText = ... // mixed-language text
if(BidiFormatter.getInstance().isRtlContext()){
Locale rtlLocale = ... // RTL locale
mixedLanguageText = BidiFormatter.getInstance(rtlLocale).unicodeWrap(mixedLanguageText, TextDirectionHeuristics.ANYRTL_LTR);
}
Run Code Online (Sandbox Code Playgroud)
如果字符串中只有一个RTL语言字符,则会将字符串转换为RTL并将其对齐到左侧,否则将回退到LTR.如果你想让字符串成为RTL,即使它完全在里面,比如英语(一种LTR语言),那么你可以使用TextDirectionHeuristics.RTL而不是TextDirectionHeuristics.ANYRTL_LTR.
这是在没有a的情况下处理混合方向文本的正确方法TextView.有趣的是,正如文档所述,
还要注意的是,这些方向启发式对应于相同类型的所提供的常数的
View类setTextDirection(),如TEXT_DIRECTION_RTL.
更新:
我刚刚发现BidiJava中的类似乎做了类似的事情.抬头看!
进一步参考:
2. Unicode双向算法.
尝试添加到TextView:
android:textDirection="anyRtl"
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息,请访问:http://developer.android.com/reference/android/view/View.html#attr_android: textDirection
我遇到了同样的问题,我的目标是API16。我的解决方案非常简单,我将其添加到字符串“ \ u200F”的开头
String mixedLanguageText = ... // mixed-language text
newText = "\u200F" + mixedLanguageText;
Run Code Online (Sandbox Code Playgroud)
“ \ u200F” = Unicode字符'RIGHT-TO-LEFT MARK'(U + 200F)
| 归档时间: |
|
| 查看次数: |
5393 次 |
| 最近记录: |