MaterialAutoCompleteTextView与TextInputEditText渲染差异原因及统一方法
MaterialAutoCompleteTextView与TextInputEditText渲染差异问题
我在TextInputLayout中分别放置了一个TextInputEditText和一个MaterialAutoCompleteTextView,代码如下:
<com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/name"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" /> </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/category"> <com.google.android.material.textfield.MaterialAutoCompleteTextView android:id="@+id/category1" android:layout_width="match_parent" android:layout_height="wrap_content" /> </com.google.android.material.textfield.TextInputLayout>
除了控件标签不同,二者配置完全一致,但实际渲染效果存在差异:MaterialAutoCompleteTextView字体更大且无内边距,效果如图所示:

现提出两个问题:
- 导致二者渲染差异的明显原因是什么?
- 是否有简便方法让
MaterialAutoCompleteTextView外观与TextInputEditText一致?
问题解答
1. 渲染差异的原因
TextInputEditText是专门为TextInputLayout设计的输入控件,默认继承了TextInputLayout的内部Material样式,包含规范的内边距、字体大小等配置;而MaterialAutoCompleteTextView本质是AutoCompleteTextView的Material适配版,默认采用系统全局的自动完成输入框样式,不会自动继承TextInputLayout的内部输入框样式,因此出现外观差异。
2. 统一外观的简便方法
直接给MaterialAutoCompleteTextView设置TextInputEditText的标准Material样式即可,在布局中添加style属性:
<com.google.android.material.textfield.MaterialAutoCompleteTextView android:id="@+id/category1" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/Widget.MaterialComponents.TextInputEditText" />
如果需要全局统一所有MaterialAutoCompleteTextView的样式,可以在App主题中配置:
<style name="YourAppTheme" parent="Theme.MaterialComponents.DayNight"> <item name="autoCompleteTextViewStyle">@style/Widget.MaterialComponents.TextInputEditText</item> </style>
通过以上方式,就能让MaterialAutoCompleteTextView的字体大小、内边距等外观属性与TextInputEditText完全对齐。
内容的提问来源于stack exchange,提问作者user1785730
相关产品推荐
相关产品推荐

