如何解决Android无障碍字体/显示大小下工具栏文本溢出问题?
解决MaterialToolbar两行布局大字体适配问题
问题核心原因
你自定义的Toolbar第一行布局存在两个关键问题:一是Space与toolbarCash的权重配置逻辑错误,导致文本在大字体/大显示模式下无法获得合理的可用空间;二是toolbarCash未配置自动文本缩放规则,无法自适应缩小字号以完整显示内容。
具体修复方案
1. 修正布局权重配置
移除多余的Space控件,将两个TextView的layout_width设为0dp,通过layout_weight分配可用宽度,确保两者各自占据固定比例的显示空间,避免互相挤压:
2. 完善自动文本缩放配置
给两个TextView都添加完整的自动缩放参数,包括最小字号和缩放步长,确保极端大字体场景下能缩小到合适尺寸,完整显示内容:
3. 移除无效配置
删除Manifest中<supports-screens android:resizeable="false" />,该配置对字体缩放适配无帮助,反而可能干扰布局的自适应能力。
修改后的第一行布局代码
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:weightSum="2"> <com.google.android.material.textview.MaterialTextView android:id="@+id/toolbarCompanyTitle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:autoSizeMaxTextSize="16sp" android:autoSizeMinTextSize="10sp" android:autoSizeStepGranularity="1sp" android:autoSizeTextType="uniform" android:maxLines="1" android:text="My Game Company" android:textColor="@color/white" android:textSize="16sp" android:textStyle="bold" /> <com.google.android.material.textview.MaterialTextView android:id="@+id/toolbarCash" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:autoSizeMaxTextSize="16sp" android:autoSizeMinTextSize="10sp" android:autoSizeStepGranularity="1sp" android:autoSizeTextType="uniform" android:maxLines="1" android:text="$1,000,000,000" android:textAlignment="textEnd" android:textColor="@color/white" android:textSize="16sp" android:textStyle="bold" /> </LinearLayout>
额外优化建议
- 给MaterialToolbar添加
android:paddingStart="8dp"和android:paddingEnd="8dp",避免文本贴边被屏幕边缘截断; - 如果需要更灵活的布局控制,可以用
ConstraintLayout替代LinearLayout,通过链式布局让两个TextView在可用空间内更智能地缩放适配。
内容的提问来源于stack exchange,提问作者Tristan Possessky
相关产品推荐
相关产品推荐

