我有一个支持RTL的应用程序。在格式化两个团队之间的得分时,我会写类似以下的内容:
在Android模拟器上,如果我的textfield设置为textDirection ="locale",那么它会输出“0-1”,在我所有运行Android 8和Android 9的测试设备上,包括我的华为和基本上任何地方。但是,如果我在一个安卓8.0的三星S7上测试这个功能,它会返回“1-0”。我在物理设备上和三星设备实验室进行了测试:https://developer.samsung.com/remotetestlab/rtlDeviceList.action 这是错误的做法吗?当我有一个包含得分的单个文本字段时,如何格式化得分,以便在所有设备的LTR和RTL上都能正常工作?这在大多数设备上都有效,但似乎我在三星设备上错过了某些东西。
下面是我的代码:
应用程序代码:
模拟器截图:
三星S7截图:
t1.setText(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));
在Android模拟器上,如果我的textfield设置为textDirection ="locale",那么它会输出“0-1”,在我所有运行Android 8和Android 9的测试设备上,包括我的华为和基本上任何地方。但是,如果我在一个安卓8.0的三星S7上测试这个功能,它会返回“1-0”。我在物理设备上和三星设备实验室进行了测试:https://developer.samsung.com/remotetestlab/rtlDeviceList.action 这是错误的做法吗?当我有一个包含得分的单个文本字段时,如何格式化得分,以便在所有设备的LTR和RTL上都能正常工作?这在大多数设备上都有效,但似乎我在三星设备上错过了某些东西。
下面是我的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Home team won 1-0"/>
<TextView
android:id="@+id/t1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layoutDirection="locale"
android:text="1-0"
/>
<TextView
android:id="@+id/t2"
android:layoutDirection="rtl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1-0"
/>
<TextView
android:id="@+id/t3"
android:textDirection="locale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1-0"
/>
<TextView
android:textDirection="rtl"
android:id="@+id/t4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1-0"
/>
<TextView
android:textDirection="rtl"
android:id="@+id/t5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1-0"
/>
<TextView
android:textDirection="locale"
android:id="@+id/t6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1-0"
/>
<TextView
android:textDirection="locale"
android:id="@+id/t7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1-0"
/>
<TextView
android:textDirection="locale"
android:id="@+id/t8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1-0"
/>
<TextView
android:textDirection="locale"
android:id="@+id/t9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1-0"
/>
</LinearLayout>
应用程序代码:
t1.setText(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));
t2.setText(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));
t3.setText(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));
t4.setText(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));
t5.setText(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));
t6.setText(BidiFormatter.getInstance(Locale.forLanguageTag("ar-MA")).unicodeWrap(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0), TextDirectionHeuristicsCompat.ANYRTL_LTR));
t7.setText(BidiFormatter.getInstance(Locale.forLanguageTag("ar-MA")).unicodeWrap(String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0), TextDirectionHeuristicsCompat.RTL));
t8.setText("\u200F" + String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));
t9.setText("ع" + String.format(Locale.forLanguageTag("ar-MA"), "%d - %d", 1, 0));
setSupportActionBar(toolbar);
模拟器截图:
![enter image description here](https://istack.dev59.com/o4Mulm.webp)
![enter image description here](https://istack.dev59.com/g6lC7m.webp)
setContentView()
之前调用Locale.setDefault(getResources().getConfiguration().locale)
会发生什么?getResources().getConfiguration()
中包含了什么内容?(运行调试器并将输出复制到问题中。我对locale
和layoutDirection
感兴趣。) - Eugen Pechanec