我使用支持库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。我有不同长度的文本,我想将这些文本设置为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" />
不幸的是,文本视图被裁剪了。我想将此String设置为上面TextView的文本:&#34; Groupa&#34;但这是结果:
(TextView位于带有黄色圆圈背景的ConstraintLayout内。)
正如您所见,textview根本没有调整大小。你知道该怎么办吗?
感谢。
答案 0 :(得分:37)
我在几种情况下对此进行了测试,得出以下结论:
您必须具有有界宽度和高度。例如,如果您将宽度设置为match_parent
,但将wrap_content
设置为高度,我认为Android并不知道您希望拉伸文本的高度。在你的例子中,你没有特定的高度,所以我认为这就是为什么它不起作用。
例如:
我不知道为什么Android官方文档会使用wrap_content作为示例......
正如您所看到的,我在示例中没有使用其他属性,因此可能不是属性不正确的问题。
而且,是的,我使用的TextView是 android.support.v7.widget.AppCompatTextView 。
只要您使用支持库26.0.0或更高版本就足够了。
修改强>
至于ConstraintLayout
,校长是一样的。
您应该同时具有有界宽度和高度,这意味着每个维度的下限之一:
您已为该尺寸(宽度或高度)指定了绝对值
您已将约束设置为双向
例如:
更新:(2017-09-21)
我测试过,遗憾的是它似乎还不支持自定义字体,这是一个在支持库v26中一起发布的函数...
答案 1 :(得分:32)
除了其他正确的答案之外,我发现了另一个阻止自动调整工作的观点。
不要将android:singleLine="true"
与自动调整一起使用。请改用较新的android:maxLines="1"
。
答案 2 :(得分:8)
我有同样的问题。
我通过改变我的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"/>
答案 3 :(得分:5)
您为android设置了哪个值:layout_height属性?
From the document:&#34; 如果在XML文件中设置自动调整大小,则不建议使用值&#34; wrap_content&#34;对于TextView的layout_width或layout_height属性。它可能会产生意想不到的结果。&#34;
答案 4 :(得分:3)
像这样配置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"
/>
答案 5 :(得分:3)
在我的情况下,问题非常愚蠢:虽然autosizing对我来说总是很好,但在一个TextView上我使用了android:
命名空间而不是app:
!我完全忘记了自己的错误,并一直在想为什么它不起作用。因此,在使用AppCompat
主题时,请务必使用AppCompat
属性,而不是原生属性。
答案 6 :(得分:2)
您是否尝试过设置所发布链接中描述的所有四个属性?
E.g。
public class UserRequestModel {
public List<User> Users { get; set; }
public List<Request> Requests { get; set; }
}
您还可以尝试将width和height设置为wrap_content,并将minWidth和maxWidth设置为56dp。
正如评论中所提到的那样,maxlines似乎也会导致问题(对我来说也是如此),所以请尝试删除它(自动调整应该通过减少文本大小来处理这个问题)。
答案 7 :(得分:1)
如果你不知道textview的大小。例如你把它们放在linearlayout中并将高度或宽度设置为0dp。然后我得到了解决方案。你需要在OnSizeChanged事件中设置setAutoSizeTextTypeWithDefaults。
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
this.setAutoSizeTextTypeWithDefaults(AUTO_SIZE_TEXT_TYPE_UNIFORM);
}
答案 8 :(得分:1)
@Sira Lam接受的答案的附加信息:
始终确保您不会继承可能与AutoTextSize的行为相冲突的属性,尤其是android:singleLine
。
即使android:maxLines
或android:lines
不会妨碍TextView
调整大小, singleLine
属性(设置为true时)完全禁用任何自动调整大小。
因此,在查找AutoTextSize问题时,首先尝试搜索singleLine
属性,因为扩展Button
时有时会继承该属性。
答案 9 :(得分:0)
确保使用android:maxLines=1
,如@Henning所说。
<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" />
答案 10 :(得分:0)
请确保选中以下选项以使 autoSize 起作用:
wrap_content
和layout_width
)中使用layout_height
singleLine
,而要使用android:maxLines
app:autosizexxx
代替android:autosizexxx
来支持较早的android版本AppCompatTextView
和TextView
中均有效,因此您无需更改视图答案 11 :(得分:0)
除了单行 TextView
的 autosize 属性之外,我还必须添加 textSize
,因此环绕的高度足够大,可以让文本调整到定义的最大大小
android:lines="1"
android:maxLines="1"
android:textSize="30sp"
app:autoSizeMaxTextSize="30sp"
app:autoSizeMinTextSize="12sp"
app:autoSizeTextType="uniform"