android:autoCompleteTextViewStyle在主题中无效的原因咨询
为什么全局android:autoCompleteTextViewStyle不生效?
Material Components库中,ExposedDropdownMenu样式的TextInputLayout会内部创建AutoCompleteTextView,它的样式优先级高于全局主题的android:autoCompleteTextViewStyle——TextInputLayout自身的默认样式已经指定了内部AutoCompleteTextView的样式模板,直接覆盖了全局配置。
正确的统一配置步骤
自定义AutoCompleteTextView样式
创建一个针对ExposedDropdownMenu场景的AutoCompleteTextView样式,设置字号和文字颜色:<style name="CustomExposedAutoCompleteStyle" parent="Widget.MaterialComponents.AutoCompleteTextView.FilledBox.ExposedDropdownMenu"> <item name="android:textSize">14sp</item> <item name="android:textColor">@color/your_target_text_color</item> <!-- 可按需添加其他属性,比如提示文字颜色等 --> </style>关联到TextInputLayout的全局样式
既然你已经通过全局主题的textInputStyle配置了轮廓样式,直接在这个TextInputLayout样式中指定内部AutoCompleteTextView的样式即可:<style name="CustomTextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"> <!-- 你已有的轮廓样式配置,比如: <item name="boxStrokeColor">@color/your_stroke_color</item> <item name="hintTextColor">@color/your_hint_color</item> --> <!-- 关键:指定内部AutoCompleteTextView使用自定义样式 --> <item name="android:autoCompleteTextViewStyle">@style/CustomExposedAutoCompleteStyle</item> </style>全局主题绑定
在你的Theme.Base.App主题中,确保textInputStyle指向上述自定义的TextInputLayout样式:<style name="Theme.Base.App" parent="Theme.MaterialComponents.DayNight.NoActionBar"> <item name="textInputStyle">@style/CustomTextInputLayoutStyle</item> <!-- 无需再单独设置全局android:autoCompleteTextViewStyle --> </style>
替代方案:直接全局覆盖Material Components的AutoCompleteTextView样式
如果不想修改TextInputLayout的样式,也可以直接在全局主题中覆盖Material Components的AutoCompleteTextView默认样式(注意不带android:前缀):
<style name="Theme.Base.App" parent="Theme.MaterialComponents.DayNight.NoActionBar"> <item name="autoCompleteTextViewStyle">@style/CustomExposedAutoCompleteStyle</item> <item name="textInputStyle">@style/YourExistingOutlinedTextInputStyle</item> </style>
这种方式会覆盖所有Material Components AutoCompleteTextView的默认样式,包括ExposedDropdownMenu内部的实例。
内容的提问来源于stack exchange,提问作者Funny Moments
相关产品推荐
相关产品推荐

