AppCompatEditText设置textCursorDrawable="@null"及自定义背景后光标不显示
修复方案
你遇到的问题是numberPassword输入类型、AppCompat组件兼容问题、自定义光标配置不全三个原因共同导致的,按以下步骤逐一修复即可:
- 修正自定义光标drawable配置
你当前的自定义光标仅设置了宽度,未指定高度,系统无法正确渲染,修改为如下配置,高度可根据你的文字大小自行调整:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 宽度1dp,高度匹配文字大小,这里和你设置的12ssp文字适配 --> <size android:width="1dp" android:height="14dp"/> <!-- 颜色和你的文字颜色保持一致即可 --> <solid android:color="@color/colorPrimary"/> <!-- 可选:加圆角更美观 --> <corners android:radius="0.5dp"/> </shape>
- 修改布局属性
删掉布局里的android:textCursorDrawable="@null",替换为你修改后的自定义光标引用:
android:textCursorDrawable="@drawable/你的自定义光标文件名"
- 动态设置光标(适配密码输入类型兼容问题)
部分系统版本下numberPassword输入类型会强制替换光标样式,在控件初始化完成后动态设置一次光标即可避开该问题:
// Kotlin 示例 edtPassCode1.post { edtPassCode1.textCursorDrawable = ContextCompat.getDrawable(this, R.drawable.你的自定义光标文件名) }
// Java 示例 edtPassCode1.post(new Runnable() { @Override public void run() { edtPassCode1.setTextCursorDrawable(ContextCompat.getDrawable(YourActivity.this, R.drawable.你的自定义光标文件名)); } });
- 排查依赖版本问题
如果你使用的androidx.appcompat:appcompat依赖版本在1.2.0~1.3.0区间,存在已知的textCursorDrawable不生效bug,将依赖升级到1.6.0及以上稳定版即可修复。 - 可选:排除padding挤压问题
如果上述步骤完成后仍未显示,可临时将控件的padding改为android:padding="8dp"测试,确认是否是左右padding过大导致光标被挤出可视区域。
内容的提问来源于stack exchange,提问作者zephyr
相关产品推荐
相关产品推荐

