求助:ExposedDropdownMenu样式TextInputLayout设置自定义适配器后颜色不一致
问题分析
设置自定义适配器后,TextInputLayout顶部与底部边框颜色出现不一致的异常,根源在于自定义列表项布局未适配Material3的ExposedDropdownMenu规范、AutoCompleteTextView样式未与父布局匹配,同时自定义布局硬编码的背景也干扰了默认样式渲染。
解决方案
1. 修复自定义列表项布局
移除硬编码的android:background="@color/white",改用Material3默认的下拉菜单项样式,保证组件风格统一:
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:ellipsize="end" android:maxLines="1" style="@style/Widget.Material3.ListItemDropdownMenu" />
若需自定义文本样式,可通过扩展Widget.Material3.ListItemDropdownMenu来实现,避免直接覆盖属性。
2. 为AutoCompleteTextView指定匹配样式
在布局中给AutoCompleteTextView添加Material3的ExposedDropdownMenu专属样式,确保与TextInputLayout风格对齐:
<AutoCompleteTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="none" style="@style/Widget.Material3.AutoCompleteTextView.ExposedDropdownMenu" />
3. 修正boxStrokeColor的颜色资源
如果text_input_layout_stroke_color是单一颜色,会导致TextInputLayout无法在不同状态(聚焦/失焦/禁用)下正确切换颜色,需改为状态选择器文件(res/color/text_input_layout_stroke_color.xml):
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/your_focus_color" android:state_focused="true"/> <item android:color="@color/your_hover_color" android:state_hovered="true"/> <item android:color="@color/your_disabled_color" android:state_enabled="false"/> <item android:color="@color/your_normal_color"/> </selector>
4. 优化适配器文本绑定
在自定义列表项布局中给TextView添加系统默认文本ID,让ArrayAdapter自动完成文本绑定:
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:ellipsize="end" android:maxLines="1" style="@style/Widget.Material3.ListItemDropdownMenu" />
适配器代码保持原有逻辑即可。
验证效果
完成上述修改后重新运行项目,TextInputLayout的边框颜色将恢复统一,下拉菜单样式也会与Material3的ExposedDropdownMenu规范保持一致。
内容的提问来源于stack exchange,提问作者Saeid Lotfi

