Android EditText 光标不显示?先查 config.toml 与 settings.json 骨架 1. 光标消失这件事先别急着改 EditTextAndroid 里 EditText 光标不显示是个看起来很小、排查起来很烦的问题。它可能表现为点击输入框能弹出输入法、能打字但光标就是不闪也可能表现为光标颜色和背景一样肉眼看不见还有一种是光标只在某些机型上消失换台手机又正常。核心检索词就三个Android、EditText、光标。能做什么这篇会把「控件属性 → 主题继承 → 工具链配置」三层排查路径讲清楚适合正在做 Android 输入框、搜索框、验证码框的开发者也适合用 AI 辅助写代码、需要统一管理 Key 与配置骨架的同学。很多人第一反应是去搜「EditText 光标不显示怎么办」然后复制一堆属性进去结果有的生效有的不生效。原因在于光标可见性不只由 EditText 自己决定它还受主题里的colorControlActivated、textCursorDrawable、输入法状态、甚至你项目里 AI 工具链的配置文件影响。我试过在一个多模块项目里同一个 EditText 在 A 模块正常、B 模块消失最后发现是 B 模块的主题覆盖了光标颜色。所以这篇不打算只给你三行属性就结束而是按「先定位层级再动手改」的顺序来。前半段讲 Android 侧的控件与主题排查后半段讲怎么用 TaoToken 的 config.toml 与 settings.json 骨架把 AI 编码工具的 Key/API 通道统一起来避免工具链配置混乱反过来干扰你判断问题。两条线看似不相关但排查思路是一致的先看配置骨架再看具体属性。2. TaoToken 前置统一 Key 与 API 通道配置骨架先立住在动手改 EditText 之前先把工具链这一层理清楚。TaoToken 是一个面向 AI 编码与模型调用的统一入口官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。它的作用是让你用一套 Key 和一套配置骨架去对接不同的模型与编码工具而不是每个工具各配一份、互相打架。为什么排查光标问题要提这个因为现在很多 Android 项目会用 AI 辅助生成代码、补全配置。如果你的 coding 工具配置散落在多个文件里改一个属性可能被另一个工具的格式化规则覆盖排查时就会误判「属性没生效」。把 Key 和 API 通道统一到 config.toml 与 settings.json 两个骨架文件里能减少这种干扰。你需要先拿到 API Key。进入控制台创建https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 然后在 API Keys 页面生成https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。生成后不要硬编码进代码而是写进配置文件用环境变量或本地配置读取。如果你只是想在排查过程中快速验证模型输出、对照配置写法可以直接用模型对话页https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果你长期做 Android 编码、需要 Agent 持续补全建议了解 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。接入细节看文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。注意Key 只放在本地配置文件或环境变量里不要提交到 Git 仓库。config.toml 和 settings.json 建议加入 .gitignore。3. 可复制配置config.toml 与 settings.json 骨架这一节给你两份可直接复制的骨架。config.toml 偏工具链与模型通道settings.json 偏编辑器/插件侧的行为。两者配合能让你的 AI 编码工具读取同一套 Key 和 API 地址。先看 config.toml# config.toml —— TaoToken 统一通道骨架 # 官方入口: https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content [provider] name taotoken base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY # 从环境变量读取避免硬编码 [model] default claude-sonnet # 按需替换为你在控制台看到的模型名 timeout_seconds 60 max_retries 2 [workspace] project_root . respect_gitignore true exclude [build/, .gradle/, *.apk]再看 settings.json{ taotoken: { apiBase: https://taotoken.net/api, apiKeyEnv: TAOTOKEN_API_KEY, defaultModel: claude-sonnet, requestTimeoutMs: 60000 }, editor: { formatOnSave: false, trimTrailingWhitespace: true }, android: { lintOnSave: true, cursorDebug: true } }这两份骨架的关键点api_key_env和apiKeyEnv都指向同一个环境变量这样无论工具读 toml 还是 json拿到的都是同一把 Key。base_url和apiBase都指向 https://taotoken.net/api 不重复配置。formatOnSave设为 false是为了排查期间避免格式化把 EditText 属性顺序改掉干扰你判断。设置环境变量的方式Linux/macOSexport TAOTOKEN_API_KEY你的KeyWindows PowerShell$env:TAOTOKEN_API_KEY你的Key配好之后工具链这一层就稳定了。接下来回到 Android 侧按层级排查光标。3.1 第一层EditText 控件属性最直接的一层。在布局 XML 里给 EditText 加属性EditText android:idid/et_input android:layout_widthmatch_parent android:layout_heightwrap_content android:cursorVisibletrue android:textCursorDrawablenull android:inputTypetext|textMultiLine android:textColorcolor/text_primary android:backgrounddrawable/bg_input /android:cursorVisibletrue是显式声明光标可见。android:textCursorDrawablenull表示用系统默认光标避免自定义 drawable 加载失败导致光标消失。android:inputType用text|textMultiLine不要用textCapSentences部分国内机型对该 flag 支持不一致容易连带影响光标渲染。如果你需要自定义光标颜色和宽度用 drawable!-- res/drawable/cursor_green.xml -- ?xml version1.0 encodingutf-8? shape xmlns:androidhttp://schemas.android.com/apk/res/android android:shaperectangle size android:width2dp / solid android:color#008000 / /shape然后在 EditText 里引用android:textCursorDrawabledrawable/cursor_green3.2 第二层主题继承与 colorControlActivated如果控件属性都对了光标还是不显示往主题查。在res/values/themes.xml里style nameTheme.App parentTheme.MaterialComponents.DayNight item namecolorControlActivatedcolor/cursor_color/item item nameandroid:textColorHighlightcolor/selection_color/item /stylecolorControlActivated会影响光标和控件的激活色。如果它被设成和背景同色光标就「隐身」了。检查你的colors.xmlcolor namecursor_color#FF000000/color color nameselection_color#33000000/color排查时可以把colorControlActivated临时设成高对比色比如#FF00FF看光标是否出现。出现就说明是颜色问题不是可见性问题。3.3 第三层输入法与窗口焦点有些情况是输入法抢了焦点或者 EditText 所在窗口windowSoftInputMode配置不当。在AndroidManifest.xml里activity android:name.MainActivity android:windowSoftInputModeadjustResize|stateAlwaysVisible /adjustResize让布局随输入法调整stateAlwaysVisible让输入法状态更稳定。另外确认 EditText 是focusabletrue且focusableInTouchModetrue否则点击后拿不到焦点自然没有光标。4. 验证请求确认配置生效与光标出现配置改完怎么验证分两步先验证工具链通道通不通再验证 Android 侧光标是否出现。验证 TaoToken 通道用 curl 发一个最小请求curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet, messages: [{role: user, content: 回复 OK}], max_tokens: 16 }如果返回里有正常的 JSON 结构和内容说明 Key 与 API 地址配置正确。这一步能排除「工具链配置错误导致代码没被正确生成」的可能。验证 Android 光标用日志确认焦点状态val et findViewByIdEditText(R.id.et_input) et.requestFocus() et.setSelection(et.text?.length ?: 0) Log.d(CursorDebug, hasFocus${et.hasFocus()}, selection${et.selectionStart})运行后看 Logcat如果hasFocustrue且selection有值但光标仍不显示基本锁定在主题颜色或 drawable 层。如果hasFocusfalse回到第 3.3 节查焦点与输入法。成功结果应该是点击输入框光标出现并闪烁输入文字时光标跟随切换深浅色主题后光标颜色仍可辨认。5. 本篇常见错排查排查过程中下面这些坑最容易踩。第一个坑textCursorDrawable指向的 drawable 文件不存在或写错路径。资源编译期可能不报错运行期光标直接消失。解决方法是先设null用系统默认确认光标出现后再换自定义。第二个坑主题里colorControlActivated被全局设成透明或与背景同色。表现是「所有输入框都没光标」。解决方法是全局搜这个属性临时改成高对比色验证。第三个坑inputType用了textCapSentences或none。部分机型对textCapSentences处理不一致none则可能让输入框行为异常。统一用text|textMultiLine。第四个坑工具链配置文件里formatOnSave开着保存时把android:cursorVisible属性重排或删掉。回到第 3 节的 settings.json把formatOnSave设为 false 再排查。第五个坑Key 硬编码进代码后提交或者 config.toml 与 settings.json 里的环境变量名不一致导致工具读不到 Key生成的代码片段不完整。对照两份骨架确认api_key_env与apiKeyEnv同名。第六个坑多模块项目里子模块主题覆盖了主模块。检查每个模块的themes.xml确认没有重复定义colorControlActivated。提示排查顺序建议固定为「控件属性 → 主题 → 输入法/焦点 → 工具链配置」每次只改一层改完立即验证避免多层同时改动导致无法定位。6. 继续接入与验证如果你已经把 config.toml 和 settings.json 骨架立起来接下来可以按用途分流排查接入类问题去 API Keys 页面确认 Key 状态再看接入文档核对参数地址分别是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 和 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 想快速验证模型输出、对照配置写法用模型对话页 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 长期做 Android 编码、需要 Agent 持续补全看 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。回到 EditText 光标这件事最后给你一个实用技巧在colors.xml里单独定义cursor_color主题和 drawable 都引用它这样改一处就能全局生效。排查时先把它设成#FF00FF光标出现后再换成正式颜色。这个习惯能帮你把「颜色问题」和「可见性问题」快速分开少走弯路。