Android TextInputLayout提示位置过高、下划线位置偏下问题求助
问题解决方法
- 替换输入控件:将TextInputLayout内部的
EditText全部替换为com.google.android.material.textfield.TextInputEditText,这是Material组件库官方指定搭配TextInputLayout使用的输入控件,自带适配悬浮hint、下划线位置的默认布局逻辑,普通EditText没有对应的适配规则,会出现布局偏移问题。 - 删除EditText的自定义背景配置:你给EditText设置的
android:background="#FCC858"会覆盖TextInputLayout默认的背景样式,打乱下划线、内边距的计算规则。如果需要修改输入框背景色,通过TextInputLayout的app:boxBackgroundColor属性配置即可,下划线颜色可通过app:boxStrokeColor修改。 - 修正输入框高度配置:把EditText的
android:layout_height="match_parent"改为wrap_content,避免父布局高度计算异常导致的偏移。 - 检查应用主题配置:确保你的项目主题继承自
Theme.MaterialComponents.*系列(比如Theme.MaterialComponents.DayNight.NoActionBar),而非旧的Theme.AppCompat.*系列。Material组件库所有控件的默认样式都依赖Material主题,主题配置错误是你复制旧项目代码依然出问题的核心原因,可到res/values/themes.xml中修改主题父类。
正确配置示例
<!-- 用户名输入框示例 --> <com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:boxBackgroundColor="#FCC858" app:boxStrokeColor="#641C28" app:hintEnabled="true"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/edt_userlogin" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/username" android:layout_marginBottom="15dp" android:drawableStart="@drawable/username" /> </com.google.android.material.textfield.TextInputLayout> <!-- 密码输入框示例 --> <com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:passwordToggleEnabled="true" app:boxBackgroundColor="#FCC858" app:boxStrokeColor="#641C28" app:hintEnabled="true"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/edt_passlogin" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/password" android:drawableStart="@drawable/password" android:layout_marginBottom="40dp" android:inputType="textPassword"/> </com.google.android.material.textfield.TextInputLayout>
内容的提问来源于stack exchange,提问作者Rahmad
相关产品推荐
相关产品推荐

