You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin如何实现自适应位数的自定义圆形/圆角矩形计数徽章

Android小尺寸计数徽章实现方案

核心优化思路

  • 仅需1个自适应drawable即可满足1位数字圆形、2-3位数字圆角矩形的需求,无需手动切换背景
  • 缩小minWidth、padding、描边等参数匹配小尺寸需求
  • 统一文字大小避免不同位数显示错乱

具体实现代码

1. 优化drawable文件(count_badge.xml)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/aqua" />
    <!-- 不需要白边可直接删除stroke配置 -->
    <stroke
        android:width="1dp"
        android:color="@color/white" />
    <!-- 圆角设置为大于最大高度的数值即可自动适配样式 -->
    <corners android:radius="100dp" />
    <padding
        android:horizontal="3dp"
        android:vertical="2dp" />
</shape>

2. 布局文件调整

无需嵌套RelativeLayout,直接使用单个TextView即可实现:

<TextView
    android:id="@+id/count"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/count_badge"
    android:gravity="center"
    <!-- 控制最小尺寸,1位数字时保证为正圆 -->
    android:minWidth="24dp"
    android:minHeight="24dp"
    android:textColor="#fff"
    android:textSize="14sp"
    tools:text="9" />

3. 逻辑代码简化

无需判断位数切换背景,drawable会自动适配样式:

// 可选配置:超过3位数字显示为99+,符合常规徽章设计规范
val displayText = if (count > 999) "99+" else count.toString()
binding.count.text = displayText

自定义调整方案

  • 若觉得徽章还是过大:可同步缩小minWidth、minHeight数值,同步调小padding和textSize即可
  • 若不需要白边:删除drawable中的stroke配置即可
  • 若需要调整圆角弧度:加大drawable中corners的radius数值即可
    内容的提问来源于stack exchange,提问作者Compose Learner
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:06:02