TextView的自适应大小在Android O上不起作用

55

我使用支持库26中添加的新自适应调整大小功能。我阅读了文档,可以在这里找到: https://developer.android.com/preview/features/autosizing-textview.html

我认为它应该这样工作:您可以使用此属性启用自动调整大小:app:autoSizeTextType="uniform"。我认为TextView应该利用所有可用空间来显示整个文本(而不只是一部分-它不应该被裁剪),并且textSize应该尽可能大。如果您需要限制文本的最大或最小大小,则可以使用这两个属性:

app:autoSizeMinTextSize="XXsp" // (you can also use px or dp values.)
或者
app:autoSizeMaxTextSize="XXsp"

目前为止一切顺利。假设我需要一个宽度为56dp的TextView。我有不同长度的文本,并且想将这些文本设置到此中。它应该自动调整大小,以便在最大可能的textSize下显示整个文本(所有字符+未被裁剪)。

这是我的TextView:

<android.support.v7.widget.AppCompatTextView
        android:id="@+id/vName"
        style="@style/TextView.AutoSize"
        android:layout_width="56dp"
        android:gravity="bottom|center_horizontal"
        android:maxLines="1"
        app:autoSizeMinTextSize="1px"
        app:autoSizeTextType="uniform"
        app:layout_constraintBottom_toTopOf="@id/vGuideline"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent" />

很不幸,文本视图被裁剪了。我想将此字符串设置为上面的文本视图的文本:“Groupa”,但结果是:

enter image description here

(TextView在带有黄色圆圈背景的约束布局中。)

如您所见,文本视图根本没有重新调整大小。你有什么办法吗?

谢谢。


你的目标API级别是多少? - kira_codes
我的目标 API 级别是 26。 - Tom Wayne
刚试了一下,遇到了类似的问题,我发现文本会缩小一点,但不足以容纳整个文本。我正在使用支持26的版本。 - Alex
我通过限制文本大小和粒度来使其工作,从而生成了一个较小的数组。<TextView android:id="@android:id/title" style="@style/TextAppearance.AppCompat.Title" android:maxLines="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/primary_text_dark" app:autoSizeTextType="uniform" app:autoSizeMinTextSize="12sp" app:autoSizeMaxTextSize="20sp" app:autoSizeStepGranularity="2sp" tools:text="标题" /> - Alex
你把它放在LinearLayout里了吗?(根据Android的自动调整大小的TextView指南)。 - EmmanuelMess
显示剩余5条评论
12个回答

1
如果您不知道TextView的大小。例如,您将它们放在LinearLayout中,并将高度或宽度设置为0dp。那么我有一个解决方案。您需要在OnSizeChanged事件中设置AutoSizeTextTypeWithDefaults。
@Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        this.setAutoSizeTextTypeWithDefaults(AUTO_SIZE_TEXT_TYPE_UNIFORM);

    }

1

确保像@Henning所说的那样使用android:maxLines=1

<androidx.appcompat.widget.AppCompatTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textColor="@color/white"
            android:textSize="16sp"
            android:textStyle="bold"

            android:maxLines="1"
            app:autoSizeMaxTextSize="16sp"
            app:autoSizeMinTextSize="12sp"
            app:autoSizeTextType="uniform"

            tools:text="Downloading" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接