如何正确配置CounterTextAppearance?自定义样式不生效问题咨询
问题原因
- 你把非TextAppearance属性错误写进了
CounterTextAppearance样式中:counterTextColor、counterMaxLength都不属于文本外观属性,不能放在TextAppearance类的样式里,定义了也不会生效。 - TextAppearance的父主题适配问题:Material组件对应的文本外观应当继承
TextAppearance.MaterialComponents下的子类,而非AppCompat的旧主题,部分Material库版本下使用AppCompat父主题会出现适配失效。 - 未单独配置TextInputLayout的计数器专属属性:
counterTextColor、counterMaxLength都是TextInputLayout的独立属性,需要直接在控件标签中声明。
修复方案
1. 调整自定义文本样式
删除样式中的非TextAppearance属性,修改父类为Material系列主题:
<style name="CounterTextAppearance" parent="TextAppearance.MaterialComponents.BodySmall"> <item name="android:fontFamily">@font/karla_bold</item> <item name="android:textSize">13sp</item> </style>
2. 修正TextInputLayout配置
把原本错误写在样式里的属性移到控件标签中单独配置:
<com.google.android.material.textfield.TextInputLayout android:id="@+id/reason_layout" style="@style/TextInputLayoutStyle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/general_margin_top" android:hint="@string/bullettin_reason_field" app:counterEnabled="true" app:counterMaxLength="60" app:counterTextColor="@color/red" app:counterTextAppearance="@style/CounterTextAppearance" app:error="@{bindingViewModel.reasonValidator.error}" app:errorEnabled="true" app:helperText="@string/reason_helper_text" app:helperTextEnabled="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/code_layout"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/edit_reason" style="@style/TextInputEditTextStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textCapSentences" android:maxLength="60" android:text="@={bindingViewModel.reasonLiveData}"/> </com.google.android.material.textfield.TextInputLayout>
额外检查项
如果调整后样式仍不生效,请确认应用全局主题的父类是Theme.MaterialComponents系列(如Theme.MaterialComponents.Light.NoActionBar),如果仍在使用Theme.AppCompat系列主题,Material组件的自定义样式会出现兼容问题,需要先调整全局主题。
内容的提问来源于stack exchange,提问作者DoctorWho
相关产品推荐
相关产品推荐

