Chr*_*vik 5 android arabic right-to-left
我有一个支持 RTL 的应用程序。当格式化两个团队之间的分数时,我会写下以下内容:
\n\nt1.setText(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));\nRun Code Online (Sandbox Code Playgroud)\n\n如果我的文本字段设置为 textDirection="locale",在运行 Android 8 和 Android 9 的所有测试设备上、在我的华为上以及基本上在任何地方,它都会在 Android 模拟器上输出“0 - 1”。但如果我在运行 Android 8.0 的三星 S7 上进行测试,它会返回“1 - 0”。我在物理设备和三星设备实验室上进行了测试:https ://developer.samsung.com/remotetestlab/rtlDeviceList.action
\n\n这是错误的做法吗?当我有一个包含乐谱的文本字段时,如何格式化乐谱,使其在所有设备上的 LTR 和 RTL 上都可以使用?这在大多数设备上都能完美运行,但我似乎遗漏了一些关于它在三星设备上崩溃的原因。
\n\n这是我的代码:
\n\n<?xml version="1.0" encoding="utf-8"?>\n<LinearLayout\n xmlns:android="http://schemas.android.com/apk/res/android"\n xmlns:app="http://schemas.android.com/apk/res-auto"\n xmlns:tools="http://schemas.android.com/tools"\n android:orientation="vertical"\n android:layout_width="match_parent"\n android:layout_height="match_parent"\n tools:context=".MainActivity"\n tools:showIn="@layout/activity_main">\n\n <TextView\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:text="Home team won 1-0"/>\n\n <TextView\n android:id="@+id/t1"\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:layoutDirection="locale"\n android:text="1-0"\n />\n <TextView\n android:id="@+id/t2"\n android:layoutDirection="rtl"\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:text="1-0"\n />\n <TextView\n android:id="@+id/t3"\n android:textDirection="locale"\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:text="1-0"\n />\n <TextView\n android:textDirection="rtl"\n android:id="@+id/t4"\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:text="1-0"\n />\n <TextView\n android:textDirection="rtl"\n android:id="@+id/t5"\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:text="1-0"\n />\n <TextView\n android:textDirection="locale"\n android:id="@+id/t6"\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:text="1-0"\n />\n <TextView\n android:textDirection="locale"\n android:id="@+id/t7"\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:text="1-0"\n />\n <TextView\n android:textDirection="locale"\n android:id="@+id/t8"\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:text="1-0"\n />\n <TextView\n android:textDirection="locale"\n android:id="@+id/t9"\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:text="1-0"\n />\n\n</LinearLayout>\nRun Code Online (Sandbox Code Playgroud)\n\n应用程序代码:
\n\nt1.setText(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));\nt2.setText(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));\nt3.setText(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));\nt4.setText(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));\nt5.setText(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));\nt6.setText(BidiFormatter.getInstance(Locale.forLanguageTag("ar-MA")).unicodeWrap(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0), TextDirectionHeuristicsCompat.ANYRTL_LTR));\nt7.setText(BidiFormatter.getInstance(Locale.forLanguageTag("ar-MA")).unicodeWrap(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0), TextDirectionHeuristicsCompat.RTL));\nt8.setText("\\u200F" + String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));\nt9.setText("\xd8\xb9" + String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));\nsetSupportActionBar(toolbar);\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n
在我的情况下,三星设备上的这个错误/功能似乎有一个解决方法:
String RTL_INDICATOR = "\u200f";
t1.setText(String.format(Locale.forLanguageTag("ar-MA"), "%d %s- %d", 1, RTL_INDICATOR, 0));
Run Code Online (Sandbox Code Playgroud)
这个从右到左的标记(https://www.fileformat.info/info/unicode/char/200f/index.htm)必须插入到两个整数的中间。如果插入到字符串的开头,则无法解决问题。
该代码变得非常丑陋,因为我必须在很多地方执行此操作,但它适用于所有 Android 版本(我已经测试过)的所有设备,因此暂时将其标记为答案。
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |