开发中用到TextInputLayout配合TextInputEdittext做输入框,在android7.0 android8.0手机上运行正常,在异步android5.0.2的手机上,点击输入框就报错:“android.view.InflateException: Binary XML file line #6 : Error inflating class Textview”。而实际上报错的xml并非是当前页面的布局文件,因为布局里面textview根本就没有设置其他属性,经过各种排查,最后发现问题出现在给TextInputLayout设置主题属性的时候,通常我们会通过此方法更改提示文字的样式和下划线的样式
android:theme="@style/txt_lab"
txt_lab为我用到的样式,最开始是这个样子的
<style name="txt_lab" parent="TextAppearance.AppCompat"> <!--<!– 默认状态提示颜色和字体–>--> <item name="android:textColorHint">@color/white</item> <item name="android:textSize">15sp</item> <!--下面可以根据需要设置,如果没有将默认使用默认theme的颜色--> <!--Label标签的颜色--> <item name="colorAccent">@color/white</item> <!-- 默认状态状态设置底线颜色 --> <item name="colorControlNormal">@color/white</item> <!-- 选择的底线颜色 --> <item name="colorControlActivated">@color/white</item> <item name="passwordToggleTint">@color/snow</item> <item name="colorControlHighlight">@color/snow</item> </style>
注意他的parent我设置的是TextAppearance,就会出现文中提到的bug
修改成下面的Theme.Appcompat就行了
<style name="txt_lab" parent="Theme.AppCompat.Light.NoActionBar"> <!--<!– 默认状态提示颜色和字体–>--> <item name="android:textColorHint">@color/white</item> <item name="android:textSize">15sp</item> <!--下面可以根据需要设置,如果没有将默认使用默认theme的颜色--> <!--Label标签的颜色--> <item name="colorAccent">@color/white</item> <!-- 默认状态状态设置底线颜色 --> <item name="colorControlNormal">@color/white</item> <!-- 选择的底线颜色 --> <item name="colorControlActivated">@color/white</item> <item name="passwordToggleTint">@color/snow</item> <item name="colorControlHighlight">@color/snow</item> </style>