如何实现AppCompatTextView自动适配文字尺寸及高度自适应?
解决AppCompatTextView文字自动适配+高度自适应的问题
我之前也踩过ConstraintLayout和AutoSizeTextView搭配的坑,你现在的问题根源在于高度设置的逻辑错了,咱们一步步来改:
问题分析
你用了android:layout_height="0dp"加上app:layout_constraintHeight_default="spread",这会让ConstraintLayout直接把TextView拉伸到app:layout_constraintHeight_max设定的最大高度,完全忽略文字内容的实际高度,自然就没法自适应了。
正确配置方案
核心是把TextView的高度设为wrap_content,让它先根据文字内容计算自身高度,再通过ConstraintLayout限制最大高度,同时保留AutoSize的字号适配逻辑:
<android.support.v7.widget.AppCompatTextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" <!-- 限制最大高度,内容高度超过这个值时会被截断并缩字号 --> app:layout_constraintHeight_max="@dimen/title_text_height" <!-- 开启文字自动适配 --> app:autoSizeTextType="uniform" <!-- 最小字号 --> app:autoSizeMinTextSize="@dimen/title_min_size" <!-- 最大字号 --> app:autoSizeMaxTextSize="@dimen/title_max_size" <!-- 可选:字号调整的步长,控制缩放精度 --> app:autoSizeStepGranularity="1sp" <!-- 其他属性:比如文字对齐、padding等 --> android:gravity="center" android:padding="8dp"/>
关键属性说明
android:layout_height="wrap_content":让TextView优先根据文字内容计算高度,这是自适应的基础app:layout_constraintHeight_max:当文字内容高度超过这个值时,ConstraintLayout会把TextView的高度限制在这个最大值,同时AutoSize会自动缩小字号,直到文字能在最大高度内显示(或者达到最小字号)app:autoSizeTextType="uniform":必须开启这个才能让文字自动缩放,否则最小/最大字号设置无效
这样配置后,TextView的高度会先跟着文字内容走,只有当内容太多、高度超过你设定的最大值时,才会被限制高度,同时自动缩小字号来适配,完美符合你的需求~
内容的提问来源于stack exchange,提问作者png
相关产品推荐
相关产品推荐

