Outlined TextInputLayout圆角大于8dp时聚焦态hint与边框重叠如何解决
解决方案
方法1:调整内置属性(推荐,改动最小)
在你定义的TextInputLayoutStyle中新增两个属性,数值可根据30dp的圆角大小微调:
<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox"> <!-- 原有配置保持不变,新增以下2行 --> <item name="hintCollapsedMarginTop">-5dp</item> <item name="boxStrokeCutoutPadding">4dp</item> </style>
hintCollapsedMarginTop:控制hint折叠(聚焦/有输入内容)时的顶部边距,设为负值可以让hint向上偏移,避开圆角区域的边框boxStrokeCutoutPadding:调整边框给hint预留的缺口左右间距,避免hint边缘和边框衔接处重叠
方法2:升级依赖版本(从根源修复)
该问题是Material Components早期版本的已知缺陷,1.7.0及以上版本已经优化了大圆角下hint位置的自动计算逻辑,直接升级依赖即可无需额外修改配置:
// 替换你项目中原有material依赖的版本号即可 implementation 'com.google.android.material:material:1.9.0'
方法3:自定义背景(适配特殊样式需求)
如果需要更自由的样式调整,可以关闭TextInputLayout自带的外框绘制,用自定义shape做背景:
- 新建
res/drawable/bg_search_input.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="30dp"/> <stroke android:width="1.5dp" android:color="@color/text_input_stroke_color"/> <solid android:color="@android:color/transparent"/> </shape>
- 修改
TextInputLayoutStyle配置:
<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox"> <!-- 删除原有boxCornerRadius、boxStrokeWidth、boxStrokeColor属性 --> <!-- 原有其他配置保持不变,新增以下配置 --> <item name="boxBackgroundMode">none</item> <item name="android:background">@drawable/bg_search_input</item> <item name="hintCollapsedMarginTop">-5dp</item> </style>
内容的提问来源于stack exchange,提问作者Andrey Karchevsky
相关产品推荐
相关产品推荐

