项目支持RTL;尤其是阿拉伯语。要求是所有数字必须以英语格式出现,即使语言被选择为阿拉伯语言环境,我们实现它的方式通常是以下代码在TextViews的情况下:
TextView t = findViewById(R.id.sampleTV);
t.setText(String.format("123",Locale.US));
这里123将显示为"123"因为我们是在美国语言环境中格式化的,非常硬编码,没有"١٢٣">
我想为Android材质组件的底部导航提供的徽章通知实现相同的功能,这是我尝试过的:
if(navigation!=null) {
NumberFormat nf = NumberFormat.getInstance(Locale.US);
BadgeDrawable badgeDrawable = navigation.getOrCreateBadge(R.id.nav_account);
if (badgeDrawable != null) {
if((counterNoti + counter + counterRoom) <= 0) {
badgeDrawable.setVisible(false);
badgeDrawable.clearNumber();
}
else
{
int x = counterNoti + counter + counterRoom;
nf.format(x);
badgeDrawable.setVisible(true);
badgeDrawable.setNumber(x);
}
}
(where navigation is reference to my BottomNavigation!)
然而,即使这样,数字也是用阿拉伯语显示的,不像setText的情况。有办法实现这个目标吗?还是我需要另一种选择?
感谢您的意见和时间!谢谢。
下面的方法对我有效,通过调用onCreate
中的以下函数来更改当前JVM实例的本地private fun numbersFormat() {
val locale = Locale.ENGLISH
Locale.setDefault(locale)
}
您无法以简单的方式更改徽章数字文本区域设置。我的决定是创建自定义徽章通过xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout_badge"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_counter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|right"
android:layout_marginTop="4dp"
android:layout_marginRight="0dp"
android:background="@drawable/bg_badge"
android:gravity="center"
android:minWidth="21dp"
android:minHeight="21dp"
android:textAppearance="@style/Typography.BadgeCounter"
android:textColor="#ffffff"
tools:ignore="RtlHardcoded"
tools:text="999+" />
在你的片段中扩展布局,并像这样设置TextView的文本:
txtCounter.text = NumberFormat.getInstance(Locale.ENGLISH).format(counter)