Material 3中修改TextInputEditText光标颜色失败,求有效方案
Material 3 中修改 TextInputEditText 光标颜色的有效方案
首先注意:你的 TextInputEditText 设置了 android:background="@color/colorPrimary",这会覆盖 Material 组件默认的 EditText 样式,是导致之前方案无效的关键原因之一,建议移除该属性,改用 TextInputLayout 的样式控制背景。
以下是三种经过验证的有效方案:
方案1:通过 EditText 主题 + textCursorDrawable="@null" 实现
给 TextInputEditText 添加主题覆盖,并设置 android:textCursorDrawable="@null",让光标颜色继承主题中的 colorControlActivated:
修改布局中的 EditText:
<com.google.android.material.textfield.TextInputEditText android:id="@+id/description_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:imeOptions="actionDone" android:inputType="textCapSentences" android:textCursorDrawable="@null" android:theme="@style/EditTextCursorTheme" />
在 styles.xml 中定义主题:
<style name="EditTextCursorTheme"> <item name="colorControlActivated">@color/your_target_color</item> </style>
方案2:自定义光标 Drawable
创建自定义的光标形状 Drawable,直接指定颜色:
在 drawable 目录下创建 cursor_custom.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/your_target_color" /> <size android:width="2dp" /> <!-- 光标宽度可按需调整 --> </shape>
在 EditText 中引用该 Drawable:
<com.google.android.material.textfield.TextInputEditText android:id="@+id/description_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:imeOptions="actionDone" android:inputType="textCapSentences" android:textCursorDrawable="@drawable/cursor_custom" />
方案3:通过 TextInputLayout 样式统一控制
在现有 TextInputLayout 样式中添加 editTextStyle,统一指定内部 EditText 的光标样式:
修改你的主题样式:
<style name="Widget.Material3.TextInputLayout.FilledBox.ExposedDropdownMenu.Honk"> <item name="boxStrokeColor">@color/textDropdownBoxStrokeColor</item> <item name="hintTextColor">@color/textDropdownBoxStrokeColor</item> <item name="colorControlActivated">@color/textDropdownBoxStrokeColor</item> <item name="endIconTint">@color/dropdown_menu_arrow</item> <item name="editTextStyle">@style/CustomFilledEditText</item> </style> <style name="CustomFilledEditText" parent="Widget.Material3.TextInputEditText.FilledBox"> <item name="android:textCursorDrawable">@null</item> <item name="colorControlActivated">@color/your_target_color</item> </style>
这样所有使用该 TextInputLayout 样式的 EditText 都会自动应用该光标颜色。
内容的提问来源于stack exchange,提问作者Leonardo Sibela
相关产品推荐
相关产品推荐

