TextView自动调整不起作用(Android O)

我在支持库26中添加了新的自动调整function。我阅读了一个可以在这里find的文档: https : //developer.android.com/preview/features/autosizing-textview.html

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

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

要么

 app:autoSizeMaxTextSize="XXsp" 

到现在为止还挺好。 假设我需要一个宽度为56dp的TextView。 我有不同长度的文本,我想将这些文本设置为此TextView 。 它应该自动resize,以便在最大可能的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" /> 

不幸的是,文本视图被裁剪。 我想把这个string设置为上面的TextView的文本:“Groupa”,但这是结果: 在这里输入图像说明

(TextView在带有黄色圆圈背景的ConstraintLayout内部。)

正如你所看到的textview没有resize。 你有什么想法做什么?

谢谢。

Related of "TextView自动调整不起作用(Android O)"

我已经testing了一些情况,并有以下结论:

你必须有有限的宽度高度。 例如,如果您将宽度设置为match_parent但是将高度设置为wrap_content ,则我认为Android不知道您想要拉伸文本的高度有多高。 在你的例子中,你没有特定的高度,所以我认为这是不行的原因。

例如:

包装文本的内容高度

文本的具体高度

我不知道为什么Android官方文档将使用wrap_content作为例子…

正如你所看到的,我没有在我的例子中使用其他属性,所以它可能不是不正确的属性的问题。

而且,是的,我使用的TextView是android.support.v7.widget.AppCompatTextView

只要你使用支持库26.0.0或者更高版本,就足够了。

编辑:

至于ConstraintLayout ,主体是一样的。 你应该有两个边界的宽度和高度,这意味着每个维度的下面的一个:

  1. 您已经为该尺寸指定了一个绝对值(宽度或高度)

  2. 您已将约束设置为两个方向

例如:

所有4个方向都受到限制高度设置为绝对值宽度设置为绝对值

更新:(2017-09-21)

我已经testing,不幸的是,它似乎不支持自定义字体呢,这是一个function发布在支持库v26 …

我遇到过同样的问题。 我通过更改我的gradle中的两行来解决它:compile'c​​om.android.support:support-v4:26.0.1 compile 'com.android.support:support-v4:26.0.1'compile 'com.android.support:appcompat-v7:26.0.1'为了适应更长的文本添加所有四个选项,如下所示:

 <android.support.v7.widget.AppCompatTextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/your_string" app:autoSizeTextType="uniform" app:autoSizeMaxTextSize="13sp" app:autoSizeMinTextSize="5sp" app:autoSizeStepGranularity="1sp"/> 

你为android:layout_height属性设置了哪个值?

从文档 :“ 如果您在XML文件中设置自动resize,build议不要使用值”wrap_content“作为TextView的layout_width或layout_height属性,这可能会产生意外的结果。

您是否尝试过设置您发布的链接中描述的所有四个属性?

例如

 app:autoSizeTextType="uniform" app:autoSizeMaxTextSize="13sp" app:autoSizeMinTextSize="5sp" app:autoSizeStepGranularity="1sp" 

您也可以尝试将宽度和高度都设置为wrap_content,并将minWidth和maxWidth设置为56dp。

正如也在评论中提到的,maxlines似乎也会导致问题(对我来说),所以尝试删除(自动调整大概应该照顾到这一点,通过减less文本大小)。

像这样configuration你的TextView

 <TextView android:id="@+id/vName" android:layout_width="56dp" android:layout_height="wrap_content" android:maxLines="1" android:text="Groupa" app:autoSizeMinTextSize="12sp" app:autoSizeMaxTextSize="20sp" app:autoSizeTextType="uniform" /> 

在Android 22,23,26上工作良好
在这里输入图像说明

如果你不知道textview的大小。 例如你把它们放在linearlayout中,并设置高度或宽度为0dp。 那么我有一个解决scheme。 您需要在OnSizeChanged事件中设置setAutoSizeTextTypeWithDefaults。

 @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { this.setAutoSizeTextTypeWithDefaults(AUTO_SIZE_TEXT_TYPE_UNIFORM); }