如何让 TextView 在 android 中自动调整大小?

How can I make TextView auto-size in android?

我想实现自动调整文本大小的方法以获得更好的兼容性。

我关注了这篇文章:

https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview

我写了这段代码:

<TextView
        android:id="@+id/textView5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:autoSizeMaxTextSize="100sp"
        android:autoSizeMinTextSize="12sp"
        android:autoSizeStepGranularity="2sp"
        android:autoSizeTextType="none"
        android:fontFamily="@font/arimo"
        android:text="Ti piace Youtube?"
        android:textAlignment="viewStart"
        android:textAllCaps="false"
        android:textColor="#F8F3F3"
        android:textSize="20sp"
        android:textStyle="bold"
        app:autoSizePresetSizes="@array/autosize_text_sizes" />

我哪里错了?文本不会自动调整大小,例如,在 Nexus S 模拟器中,我看不到完整的文本,但它被剪切了。

谢谢 猫王

我使用 ssp 和 sdp。 ssp 文本的可缩放大小单位是 android SDK,它提供了一个新的大小单位 - ssp(可缩放 sp)。此尺寸单位根据 sp 尺寸单位(用于文本)随屏幕尺寸缩放。它可以帮助 Android 开发人员支持多个 screens.and sdp 这是应该用于非文本视图的 sdp 大小单位的兄弟。 https://github.com/intuit/ssp and https://github.com/intuit/sdp 使用 gradle 并像下面这样编译库

implementation 'com.intuit.sdp:sdp-android:1.0.4'
    implementation 'com.intuit.ssp:ssp-android:1.0.4'

在您的布局中 activity xml 例如,您可以像这样提供文本

android:textSize="@dimen/_16ssp" 对于布局

android:layout_height="@dimen/_16sdp" 这将照顾到任何屏幕享受。

对于纯文本,在 gradle 文件上添加 implementation 'com.intuit.ssp:ssp-android:1.0.4' 然后 这是 TextView 中 xml 文件的示例,如下所示

<TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Intuit"
                android:textColor="@android:color/black"
                android:textSize="@dimen/_40ssp"/>

你可以使用这个:android:autoSizeMaxTextSize="" 但这需要 api 26,如果不是这样你可以用 app

替换 android

小于 API 26,您可以使用以下对我有用的方法:

app:autoSizeMaxTextSize="100sp"
    app:autoSizeMinTextSize="2sp"
    app:autoSizeStepGranularity="2sp"
    app:autoSizeTextType="uniform"

用您想要的值替换值

最好使用 androidx.appcompat.widget.AppCompatTextView 而不是 TextView 以兼容旧设备。

我猜问题出在android:autoSizeTextType="none",应该不是none。另外,简单的说,不需要定义app:autoSizePresetSizes,让文本视图自己计算合适的大小。

<androidx.appcompat.widget.AppCompatTextView
    android:id="@+id/textView5"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fontFamily="@font/arimo"
    android:text="Ti piace Youtube?"
    android:textAlignment="viewStart"
    android:textAllCaps="false"
    android:textColor="#F8F3F3"
    android:textSize="20sp"
    android:textStyle="bold"
    app:autoSizeTextType="uniform"
    app:autoSizeMinTextSize="12sp"
    app:autoSizeMaxTextSize="100sp"
    app:autoSizeStepGranularity="1sp" />