Android Material3 OutlinedBox.Dense致TextInputLayout inflate异常
问题原因
你遇到的TextInputLayout填充报错核心是三个问题:
- 依赖版本过低:当前引入的
com.google.android.material:material:1.6.1版本不包含完整的Material3 XML组件样式,Widget.Material3.*系列的TextInputLayout相关样式从1.7.0版本才正式加入,1.6.x版本仅支持Material2体系的样式,找不到对应属性就会触发inflate异常。 - 样式用错控件层级:
@style/Widget.Material3.AutoCompleteTextView.OutlinedBox.Dense是给内层自动补全输入控件TextInputAutoCompleteTextView用的样式,不能直接套在外层TextInputLayout上,否则会因为属性不匹配导致初始化失败。 - 额外风险:你配置的jcenter仓库已经停止服务,可能存在依赖拉取不全的问题;如果应用主题未继承Material3主题,也会触发同类加载错误。
修复步骤
- 升级Material组件依赖
打开模块级build.gradle,把旧的Material依赖替换为稳定版高版本:
// 删掉原来的implementation 'com.google.android.material:material:1.6.1' implementation 'com.google.android.material:material:1.11.0'
同时把repositories里的jcenter()删掉,避免依赖拉取异常。已添加的Compose相关Material3依赖不需要调整,不影响XML组件使用。
- 修正XML布局中的样式引用
把两个TextInputLayout上错误的AutoComplete样式,替换为TextInputLayout对应的Material3轮廓框密集样式:
<!-- 原来的style="@style/Widget.Material3.AutoCompleteTextView.OutlinedBox.Dense" 替换为 --> style="@style/Widget.Material3.TextInputLayout.OutlinedBox.Dense"
如果你后续要做带下拉选项的自动补全输入框,只需要把内层的TextInputEditText替换为TextInputAutoCompleteTextView,再给内层控件设置AutoComplete对应的样式即可,普通邮箱、密码输入场景不需要用到AutoComplete系列样式。
- 校验应用主题配置
打开res/values/themes.xml,确保应用使用的主题继承自Material3主题族,例如:
<style name="Theme.你的应用名" parent="Theme.Material3.Light.NoActionBar"> <!-- 自定义主题属性放在这里 --> <item name="colorPrimary">@color/your_primary</item> </style>
不要使用Theme.MaterialComponents(Material2主题)或者Theme.AppCompat主题,否则会找不到Material3样式需要的属性。
完成以上操作后重新编译运行,inflate异常即可解决。
内容的提问来源于stack exchange,提问作者jo jo
相关产品推荐
相关产品推荐

