You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 03:15:03