如何在 Android Studio 上缩放文本大小以实现多设备兼容性?

How do I scale my text size for multi-device compatibility on Android Studio?

我无法根据用户的设备缩放文本大小。我使用约束布局来约束 TextView。我发现 autoTextSize 可用于自动使我的文本适合 TextView。然而,当我 运行 我的代码在像 BlueStacks 这样的模拟器上时,一些文本没有正确缩放。奇怪的是,有些工作但有些没有,即使我以相同的方式实现它。

这是它的外观示例:注册按钮是大字体,但其他文本不是 这是我的布局编辑器的样子:

我的注册按钮代码:

<TextView
        android:id="@+id/register"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="REGISTER"
        app:autoSizeTextType="uniform"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintDimensionRatio="5:1"
        app:layout_constraintEnd_toEndOf="@id/guideline3"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="@id/guideline2"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.541" />

我的“最多 8 个字符”文本代码。

    <TextView
        android:id="@+id/req"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:autoSizeTextType="uniform"
        android:text="*up to 8 characters"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintDimensionRatio="7:1"
        app:layout_constraintEnd_toEndOf="@+id/guideline5"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="@+id/guideline4"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.538" />

我是否以某种方式滥用了 autoSizeTextType?

此外,我的“输入用户名”文本非常小。我使用 EditText 并以与其他两个文本相同的方式实现它。如果无论如何我可以将字体大小调大以适合布局大小,请告诉我。

您的 <TextView android:id="@+id/register" 使用 app:autoSizeTextType="uniform" 属性,<TextView android:id="@+id/req" 使用 android:autoSizeTextType="uniform" - 注意区别 app/android。尝试合并此参数,您可能应该在 both/all TextViews

中使用 app

请注意 setAutoSizeTextTypeWithDefaults 是在 API 26 中引入的,因此当您使用 android: 前缀时,此属性将仅在 26+ 上受到尊重。使用自定义 app: 使此属性可用于任何 OS 版本

上的 TextView(实际上是 TextViewCompat

在布局预览上方的 Android Studio 中,您可以选择切换“要预览的设备”以及 API 版本 - 尝试更改为较旧的版本(在此示例中最多 25,最好支持的最低 minSdkVersion) 或最新的 OS 版本,IDE 应该在外观上捕捉并显示差异

像这样使用 TextView 参数

android:autoSizeTextType="uniform"
android:autoSizeMinTextSize="12sp"
android:autoSizeMaxTextSize="100sp"
android:autoSizeStepGranularity="2sp"

您可以查看 official documentation 了解更多信息。