Android Oreo阿拉伯语环境下+符号位置错误问题求助
解决Android Oreo中TextView国家代码显示顺序反转的问题
这个问题我之前做国际化应用时也碰到过,本质是Android 8.0(API 26)开始对双向文本排版逻辑做了调整——当系统处于RTL(从右到左)语言环境(比如阿拉伯语)时,短文本里的符号和数字组合容易被自动反转,导致+1变成1+。下面给你几个可行的解决办法:
方法一:添加Unicode左到右控制字符
在国家代码字符串前插入Unicode的左到右标记(LTR Mark) \u200E,强制这段文本按左到右的方向渲染,不受系统全局文本方向影响。
代码示例:
textView.setText("\u200E+1");
或者在strings.xml里定义:
<string name="country_code">\u200E+1</string>
方法二:在XML中强制TextView文本方向
直接给TextView设置android:textDirection="ltr"属性,指定该控件的文本始终按左到右排列,适合固定显示国家代码的场景。
XML示例:
<TextView android:id="@+id/tv_country_code" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="+1" android:textDirection="ltr" />
方法三:代码中动态设置文本方向
如果是动态生成国家代码,可以在代码里强制设置TextView的文本方向:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { textView.setTextDirection(View.TEXT_DIRECTION_LTR); } textView.setText("+1");
补充说明
这几种方法里,方法一的通用性最强,即使TextView里还有其他RTL内容,也只会影响国家代码这一小段;方法二和三适合整个TextView都需要LTR显示的场景,你可以根据实际需求选择~
内容的提问来源于stack exchange,提问作者Zubair Akber
相关产品推荐
相关产品推荐

