如何让LinearLayout内的四个TextView自动适配文本大小
让LinearLayout内TextView自适应屏幕且字号统一的方案
问题场景
- 大屏幕设备上,四个水平排列的TextView可完整显示:

- 小屏幕设备上,因空间不足,部分TextView无法完全展示:

需求:小屏幕下所有TextView自动缩小文本大小,适配屏幕宽度,且所有文本字号保持一致。
修改方案(推荐使用)
通过给TextView添加自动缩放属性,配合LinearLayout的权重分配空间,实现自适应效果:
- 调整LinearLayout属性,添加权重总和并明确水平方向
- 每个TextView设置权重,均分可用宽度
- 给所有TextView配置统一的自动缩放规则,确保字号同步调整
修改后的完整XML代码
<LinearLayout android:id="@+id/infoLayout" android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="4" app:layout_constraintStart_toStartOf="@+id/name" app:layout_constraintEnd_toStartOf="@+id/more" app:layout_constraintTop_toBottomOf="@+id/name" android:paddingTop="6dp"> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/date" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:drawablePadding="2dp" android:gravity="center" android:textColor="@color/text_black_60" android:textSize="12sp" android:fontFamily="@font/open_sans_regular" android:singleLine="true" android:ellipsize="end" android:autoSizeTextType="uniform" android:autoSizeMinTextSize="8sp" android:autoSizeMaxTextSize="12sp" android:autoSizeStepGranularity="1sp" app:drawableStartCompat="@drawable/ic_date" app:drawableTint="@color/text_black_60" tools:text="11/02/2021" /> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/time" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginStart="8dp" android:drawablePadding="2dp" android:gravity="center" android:textColor="@color/text_black_60" android:textSize="12sp" android:fontFamily="@font/open_sans_regular" android:singleLine="true" android:ellipsize="end" android:autoSizeTextType="uniform" android:autoSizeMinTextSize="8sp" android:autoSizeMaxTextSize="12sp" android:autoSizeStepGranularity="1sp" app:drawableStartCompat="@drawable/ic_time" app:drawableTint="@color/text_black_60" tools:text="11:02 am" /> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/stop" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginStart="8dp" android:drawablePadding="2dp" android:gravity="center" android:textColor="@color/text_black_60" android:textSize="12sp" android:fontFamily="@font/open_sans_regular" android:singleLine="true" android:ellipsize="end" android:autoSizeTextType="uniform" android:autoSizeMinTextSize="8sp" android:autoSizeMaxTextSize="12sp" android:autoSizeStepGranularity="1sp" app:drawableStartCompat="@drawable/ic_location" app:drawableTint="@color/text_black_60" tools:text="20" /> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/distance" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginStart="8dp" android:drawablePadding="2dp" android:gravity="center" android:textColor="@color/text_black_60" android:textSize="12sp" android:fontFamily="@font/open_sans_regular" android:singleLine="true" android:ellipsize="end" android:autoSizeTextType="uniform" android:autoSizeMinTextSize="8sp" android:autoSizeMaxTextSize="12sp" android:autoSizeStepGranularity="1sp" app:drawableStartCompat="@drawable/ic_distance" app:drawableTint="@color/text_black_60" tools:text="1264 Mi" /> </LinearLayout>
关键修改说明
- LinearLayout权重配置:
android:weightSum="4"和每个TextView的android:layout_weight="1"让四个控件均分容器宽度,避免空间不足时被遮挡。 - 自动缩放属性:
android:autoSizeTextType="uniform"开启自动缩放,autoSizeMinTextSize和autoSizeMaxTextSize限定字号范围,autoSizeStepGranularity设置缩放步长,确保所有TextView字号同步调整、保持一致。 - 移除maxWidth:因已通过权重分配空间,无需再限制单个TextView的最大宽度。
内容的提问来源于stack exchange,提问作者Elbrus Novruzlu
相关产品推荐
相关产品推荐

