底部导航BadgeDrawable设置显示数字在一个特定的区域,而不管所选择的一个



项目支持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)

相关内容

  • 没有找到相关文章

最新更新