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

Jos*_*ška 41 android autosize textview android-support-library android-8.0-oreo

我在支持库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.)
Run Code Online (Sandbox Code Playgroud)

要么

app:autoSizeMaxTextSize="XXsp"
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.假设我需要一个宽度为56dp的TextView.我有不同长度的文本,我想将这些文本设置为此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" />
Run Code Online (Sandbox Code Playgroud)

不幸的是,文本视图被裁剪.我想将此String设置为上面TextView的文本:"Groupa"但结果如下: 在此输入图像描述

(TextView位于ConstraintLayout内部,带有黄色圆圈背景.)

如您所见,textview根本没有调整大小.你知道该怎么办吗?

谢谢.

Hen*_*ing 42

除了其他正确的答案,我发现另一点阻止自动调整工作.

不要android:singleLine="true"与自动调整一起使用.请改用较新的android:maxLines="1".


Sir*_*Lam 40

我已经针对一些情况对此进行了测试,得出以下结论:

你必须有有限的宽度高度.例如,如果你设置宽度为match_parent,但wrap_content对于高度,我认为Android不知道你想有多高伸展你的文字.在你的例子中,你没有特定的高度,所以我认为这就是为什么它不起作用.

例如:

包装文本的内容高度

文本的特定高度

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

正如您所看到的,我在示例中没有使用其他属性,因此可能不是属性不正确的问题.

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

只要您使用支持库26.0.0或更高版本就足够了.

编辑:

至于ConstraintLayout,校长是一样的.您应该同时具有有界宽度和高度,这意味着每个维度的下方之一:

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

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

例如:

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

更新:(2017-09-21)

我测试过,遗憾的是它似乎还不支持自定义字体,这是一个在支持库v26中一起发布的函数...

  • 我之前做过一个自定义的文本视图,它扩展了AppCompatTextView.这与自动调整功能相得益彰.因此,如果您需要使用自动调整大小的自定义字体,您可以尝试一下.(类似于[here](/sf/answers/1131632911/),但扩展AppCompatTextView而不仅仅是普通的TextView (2认同)

小智 9

我遇到过同样的问题.我解决它在我的gradle这个改变两行: 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"/>
Run Code Online (Sandbox Code Playgroud)

  • @npace只有在针对api 26及更高版本时才会出现这种情况.使用`TextView`时会出现"意外的命名空间前缀"警告 (3认同)

Joh*_* Le 7

您设置为android:layout_height属性的值是多少?

从文档中:" 如果在XML文件中设置自动调整大小,建议不要将值"wrap_content"用于TextView的layout_width或layout_height属性.这可能会产生意外结果. "


小智 6

@Sira Lam 接受的答案的附加信息:

始终确保您不会继承可能与 AutoTextSize 的行为发生冲突的属性,尤其是android:singleLine.

即使android:maxLinesandroid:lines 不相应地阻止TextView调整大小,该singleLine属性(设置为 true 时)也会完全禁用任何自动调整大小。

因此,在追踪 AutoTextSize 问题时,首先尝试搜索该singleLine属性,因为它有时在扩展Button.


Ami*_*emi 6

确保检查这些选项以便autoSize工作:

  • 不要wrap_content在任何维度中使​​用(例如layout_widthlayout_height
  • 确保不使用singleLine,而是使用android:maxLines
  • 使用app:autosizexxx而不是android:autosizexxx为了支持旧的 Android 版本
  • 自动调整大小适用于 和AppCompatTextViewTextView因此您无需更改视图


010*_*101 5

在我的情况下,一个非常愚蠢的问题是:虽然自动调整对我来说总是可以正常工作,但在一个TextView上,我恰好使用了android:名称空间而不是app:!我完全忘记了自己的错误,并一直想知道为什么它不起作用。因此,使用AppCompat主题时,请务必确保使用AppCompat属性,而不是本机属性。