Autosizing of TextView doesn't work (Android O) TextView的自动调整大小不起作用(Android O)
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",但结果是这样的:
(TextView在带有黄色圆圈背景的ConstraintLayout中。)
如你所见,文本视图根本没有调整大小。你有什么办法吗?
谢谢。
问题出现的原因是:在使用TextView时,必须同时设置宽度和高度。如果设置了宽度为match_parent,但是高度为wrap_content,Android无法确定文本应该拉伸到多高。所以在没有指定具体高度的情况下,autosizing功能无法正常工作。
解决方法是:为TextView设置具体的宽度和高度。可以通过以下两种方式之一实现:
1. 为宽度或高度指定一个绝对值;
2. 在两个方向上都设置了约束。
此外,需要注意的是,如果需要使用自定义字体和autosizing功能,可以尝试继承AppCompatTextView类并创建自定义字体的TextView。但是需要注意对字体进行缓存,否则会消耗大量系统资源。
另外,根据作者的经验,autosizing功能在EditText上可能无法正常工作。虽然EditText是TextView的子类,但是作者尝试过在XML和编程方式下定义autosizing,但似乎都无法生效。
在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"的警告信息。可以参考上述链接中的方法来解决这个问题。