[Android]文本多的时候让TextView的字体自动变小

为了让 TextView 的字体在文本过多时自动变小,以显示全部文本,可以使用 Android 的 autoSizeTextType 属性。该属性允许 TextView 在空间不足时自动调整字体大小。

在 XML 中,可以这样设置:

<TextView
    android:id="@+id/tv_1_4"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="center"
    android:maxLines="1"
    android:text="轮 18"
    android:textColor="@color/color_title"
    android:textSize="12sp"
    android:autoSizeTextType="uniform"
    android:autoSizeMinTextSize="8sp"
    android:autoSizeMaxTextSize="12sp"
    android:autoSizeStepGranularity="1sp" />

解释

  • android:autoSizeTextType="uniform": 启用自动调整字体大小功能。

  • android:autoSizeMinTextSize="8sp": 设置文本的最小字体大小。可以根据需要调整此值。

  • android:autoSizeMaxTextSize="12sp": 设置文本的最大字体大小。与 android:textSize 保持一致。

  • android:autoSizeStepGranularity="1sp": 设置字体大小调整的步长。这个属性决定了字体大小调整的粒度。

注意事项

  1. 兼容性:autoSizeTextType 属性在 API 26(Android 8.0 Oreo)及以上版本中可用。如果需要兼容低版本,可以使用支持库中的 AppCompatTextView。

  2. 支持库中的 AppCompatTextView: 如果需要支持较低版本的 Android,可以在布局中使用 AppCompatTextView,并确保在项目中引入了 androidx.appcompat:appcompat 库。

<androidx.appcompat.widget.AppCompatTextView
    android:id="@+id/tv_1_4"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:gravity="center"
    android:maxLines="1"
    android:text="轮 18"
    android:textColor="@color/color_title"
    android:textSize="12sp"
    app:autoSizeTextType="uniform"
    app:autoSizeMinTextSize="8sp"
    app:autoSizeMaxTextSize="12sp"
    app:autoSizeStepGranularity="1sp" />