Autosizing of TextView doesn't work (Android O) TextView的自动调整大小不起作用(Android O)

8 浏览
0 Comments

Autosizing of TextView doesn't work (Android O) TextView的自动调整大小不起作用(Android O)

我使用了支持库26中新增的自动调整大小功能。我阅读了这里的一份文档:

https://developer.android.com/preview/features/autosizing-textview.html

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

app:autoSizeMinTextSize="XXsp" // (也可以使用px或dp值)

或者

app:autoSizeMaxTextSize="XXsp"

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

这是我的TextView:


不幸的是,文本视图被裁剪了。我想将这个字符串设置为上面的TextView的文本:"Groupa",但结果是这样的:

enter image description here

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

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

谢谢。

0
0 Comments

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

在其他正确的答案之外,我发现了另一个导致自动调整大小无法工作的原因。

不要同时使用 android:singleLine="true" 和自动调整大小。请改用较新的 android:maxLines="1"

解决方法:不要同时使用 android:singleLine="true" 和自动调整大小,在布局文件中改用 android:maxLines="1"

0
0 Comments

问题出现的原因是:在使用TextView时,必须同时设置宽度和高度。如果设置了宽度为match_parent,但是高度为wrap_content,Android无法确定文本应该拉伸到多高。所以在没有指定具体高度的情况下,autosizing功能无法正常工作。

解决方法是:为TextView设置具体的宽度和高度。可以通过以下两种方式之一实现:

1. 为宽度或高度指定一个绝对值;

2. 在两个方向上都设置了约束。

此外,需要注意的是,如果需要使用自定义字体和autosizing功能,可以尝试继承AppCompatTextView类并创建自定义字体的TextView。但是需要注意对字体进行缓存,否则会消耗大量系统资源。

另外,根据作者的经验,autosizing功能在EditText上可能无法正常工作。虽然EditText是TextView的子类,但是作者尝试过在XML和编程方式下定义autosizing,但似乎都无法生效。

0
0 Comments

在Android O系统中,TextView的自动调整大小功能无法正常工作。解决这个问题的方法是在gradle文件中更改两行代码,将support库的版本更新为26.0.1。同时,在XML布局文件中,需要使用AppCompatTextView,并添加四个属性来适应较长的文本内容。具体的解决方法如下:

首先,在gradle文件中将以下两行代码更改为:

compile 'com.android.support:support-v4:26.0.1'

compile 'com.android.support:appcompat-v7:26.0.1'

然后,在XML布局文件中,使用AppCompatTextView,并添加以下四个属性:

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

需要注意的是,只有在目标API为26及更高版本时,才可以直接使用TextView。低版本的API会出现"unexpected namespace prefix"的警告信息。可以参考上述链接中的方法来解决这个问题。

0