Android 设置与 TextView 的希伯来语文本?
Posted
技术标签:
【中文标题】Android 设置与 TextView 的希伯来语文本?【英文标题】:Android setting with TextView for Hebrew text? 【发布时间】:2011-09-12 05:35:35 【问题描述】:我正在通过字符串资源在 TextView 中设置文本。通常,希伯来语以从右到左的格式工作。当我设置文本时,它会在 LG、三星、索尼手机中设置文本从右到左的格式,但在 HTC 中它不起作用。它在 HTC 中以从左到右的格式工作。即使我将 Gravity 设置为 Java 文件中的 TextView。
TextView 中的文本应根据屏幕大小而跨度。例如,如果是 320 x 480,则显示为 4 行,但如果是 Galaxy Tab,则可能有 2 行。
这是我的代码 sn-p:
在 Java 中:
private TextView mVersionInfo, mVersionDescriptionOne, mVersionDescriptionTwo, mVersionDescriptionThree;
mVersionInfo = (TextView)findViewById(R.id.VersionInfo);
mVersionDescriptionOne = (TextView)findViewById(R.id.VersionDesc1);
mVersionDescriptionTwo = (TextView)findViewById(R.id.VersionDesc2);
mVersionDescriptionThree = (TextView)findViewById(R.id.VersionDesc3);
mVersionDescriptionOne.setGravity(Gravity.RIGHT);
mVersionDescriptionTwo.setGravity(Gravity.RIGHT);
mVersionDescriptionThree.setGravity(Gravity.RIGHT);
在 XML 中:
<TextView android:id="@+id/VersionDesc1"
android:layout_ android:layout_
android:text="@string/versiondesc1" android:textColor="#000000"
android:layout_marginTop="5dip" android:gravity="right"
android:layout_alignParentRight="true" android:layout_marginRight="10dip"
android:layout_below="@+id/Share" android:textSize="13sp"
android:layout_alignRight="@+id/Body" />
<TextView android:id="@+id/VersionDesc2"
android:layout_ android:layout_
android:text="@string/versiondesc2" android:textColor="#000000"
android:layout_alignParentRight="true" android:layout_marginRight="10dip"
android:layout_below="@+id/VersionDesc1" android:textSize="13sp"
android:layout_marginTop="5dip" android:gravity="right"
android:layout_alignRight="@+id/Body" />
<TextView android:id="@+id/VersionDesc3"
android:layout_ android:layout_
android:text="@string/versiondesc3" android:textColor="#000000"
android:layout_alignParentRight="true" android:layout_marginRight="10dip"
android:layout_below="@+id/VersionDesc2" android:textSize="13sp"
android:layout_marginTop="5dip" android:gravity="right"
android:layout_alignRight="@+id/Body" />
在字符串资源中:
<string name="versiondesc1">האפליקציה מתחברת לאתר הספק הסלולרי כדי להציג את מצב החשבון. לעיתים, כשאתר הספק איננו עובד תקין לא יהיה ניתן לקבל מידע. באם אתר הספק ישתנה האפליקציה עלולה להפסיק לעבוד. במצב כזה האפליקציה תחזור לעבודה תקינה מיד לאחר שאנו נתאים את שרת התוכנה שלנו לשינויים.</string>
<string name="versiondesc2">הערה: אנחנו לא מייצגים את חברות הסלולר ולא נמצאים איתן בקשר מסוג כלשהו!</string>
<string name="versiondesc3">אם נתקלת בבעיה, השתמש/י בכפתור יצירת קשר על מנת שנוכל לפתור אותה. נשמח לקבל כל משוב על האפליקציה.</string>
我的代码有什么问题?
任何使用过其他语言的人,请在这里指导我。
谢谢。
【问题讨论】:
@niky 请查看我上传的图片。它设置了希伯来语文本,但在文本末尾留下了一个稍微可见的标记。谢谢。 bugto 和 done 图像不可用:( @kilaka 服务器数据已被清除。很抱歉给您带来不便。 您是否设法在没有任何 3rd 方库的情况下在 textView 中显示希伯来语? (在 textview 中显示 unicode) 【参考方案1】:重力只会影响对齐,不会设置文本的基本方向。它适用于某些设备而不适用于其他设备可能是字体问题,或者可能是操作系统版本问题。尝试在文本开头添加 RIGHT-TO-LEFT MARK 字符 (\u200F)。这可能有助于 HTC 上的显示,并且不会损害已经工作的设备上的任何东西。
【讨论】:
@Hello Ted,我没有使用 RIGHT-TO-LEFT MARK 字符 (\u200F)。你能给我一些sn-p吗?这样我就可以弄清楚如何设置它。谢谢。 @AndroidVogue - 不幸的是,Android 的资源解析器不兼容 XML,否则在文本开头插入字符作为转义序列将是一件简单的事情。但由于这不起作用,最简单的方法是将字符直接键入或粘贴到资源文件中。 Eclipse 应该正确地将其保存为 UTF-8。 (在 Windows 中,您可以使用字符映射将 200F 复制到剪贴板。它位于 Unicode 子范围通用标点符号下。)如果这不起作用,我唯一能建议的就是在代码中添加字符。 @Ted,我已将所有希伯来语文本粘贴到资源文件中,正如您在我提供的代码中所见,但在 HTC 中,从右到左格式无法正确显示,因为它适用于 LG 、三星、索尼…… 我看到了。我建议您编辑资源文件并在每个资源字符串的开头放置一个 RTL 标记。我对此并不寄予厚望,但其他人已经发布(参见here)这可能会有所帮助。 HTC 也可能存在字体问题。设备运行的是什么版本的操作系统? @ ted,所以我必须把它放在这样的东西:这是我的希伯来语字符串 xml 中的一个示例,感谢 Ted Hopp 的回答:
您需要在导致问题的字符之前添加“\u200e”:
<string name="basic_text1">המר על תוצאת המשחק\u200e:</string>
结果是:
:המר על תוצאת המשחק
【讨论】:
以上是关于Android 设置与 TextView 的希伯来语文本?的主要内容,如果未能解决你的问题,请参考以下文章
Android如何在Textview下设置一个宽度与设置文本宽度相同的视图?
Android 8.1 自定义热点的时候设置了热点maxLength="32",但是在希伯来语等状态下还是发现在没到32个字符之前就无法把热点设置成功了