资讯动态

EditText cursor 样式调整:让 Codex 接入 TaoToken 后改 textCursorDrawable

发布时间:2026/9/14 21:50:33 来源:尧图企业网站定制
Android 的 EditText 默认 cursor 是灰色在浅色表单页里很容易看不清。TaoToken 是一个统一 API 兼容通道我最近把 Codex 接到了 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 上用同一把 Key 跑模型请求然后让 Codex 直接帮我生成这段 cursor 样式代码。整个过程大概是在官网创建 API Key把 Base URL 填成 https://taotoken.net/api然后让 Codex 按老流程输出 res/drawable/cursor.xml 和 android:textCursorDrawabledrawable/cursor。你可能会问改个光标有必要动用 Codex 吗我的体会是Android 里凡是这种“新建一个 drawable、再关联到属性”的重复操作实际做起来非常机械先想起来要建 cursor.xml再查一遍 drawable 里的 shape 怎么写最后还要确认 textCursorDrawable 有没有拼错。把这段交给 Codex 用自然语言描述反而比自己在多个文件里切来切去更稳。TaoToken 在这里只负责提供模型 API不参与你 Android 工程的任何部分Codex 产出的文件最终还是要放在本地工程里 build 才能看到效果。1. 默认 cursor 是灰色textCursorDrawable 才是正确的修改口1.1 先看清 EditText 的光标到底是什么Android 的 EditText 默认光标是一根灰色短竖线尺寸和颜色都受系统主题控制。你可以在 xml 里改变文本颜色、hint 颜色但光标并不直接暴露一个cursorColor属性。真正被官方认可的方案就是给android:textCursorDrawable指定一个 Drawable。这个 Drawable 的宽度决定光标粗细颜色决定光标颜色系统在绘制输入光标时会把它当作光标本体来用。举例来说原始需求是得到一根宽 1dp、颜色 #3399dd 的蓝色光标。那根灰色默认线的宽度大约 1-2dp在浅色背景下并不醒目改成品牌蓝后用户能一眼看到当前输入位置。这个改动不涉及任何 Java/Kotlin 逻辑纯粹是资源文件配置。很多人第一次查资料找到的答案就是“新建 cursor.xml再给 EditText 加属性”但为什么这两步缺一不可却很少被讲清楚。1.2 为什么这件事适合交给 Codex 来生成如果你已经习惯用 AI 写 UI 代码就会发现这类任务很适合描述式生成它不需要访问你的项目上下文也不需要理解业务逻辑只要告诉它“给 EditText 改光标宽 1dp颜色 #3399dd”它就会按标准 Android 工程结构给出两个改动点。这里要解决的问题是怎样让 Codex 用上稳定的模型通道而不是在几家厂商控制台之间来回切。TaoToken 提供的做法是在 TaoToken 创建 Key在 Codex 的 model provider 里填 Base URL之后所有请求都会统一走这条通道并且能在 TaoToken 后台看到调用记录。2. 先在 TaoToken 建 Key再把 Codex 指到 https://taotoken.net/api2.1 从官网控制台复制 YOUR_API_KEY准备材料其实就三样一个 TaoToken 账号、一台装好 Codex CLI 的电脑、一个 Android 工程。第一件事打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 注册登录后进入控制台找到 API Keys 创建一个新 Key复制出来的字符串就是 YOUR_API_KEY。创建时如果提供了备注名建议写codex-android方便后面在用量页里认出是哪条调用。注意这个 Key 会出现在你的 shell 配置或环境变量里但千万别提交到 git也不要贴到任何公共聊天窗口。如果你担心 Key 泄露可以在控制台随时吊销重建TaoToken 后台对每次调用都有记录对账比本地日志清晰。2.2 在 ~/.codex/config.toml 加一个 taotoken providerCodex 的配置文件在用户目录下的~/.codex/config.toml。我们不要改全局默认 provider而是新增一个名为taotoken的 provider再让 model_provider 指向它。下面这段是可以直接放进 config.toml 的最小配置model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api chat然后把 Key 放进环境变量export TAOTOKEN_API_KEYYOUR_API_KEY这里base_url末尾没有/v1。Codex 会按自己的协议在/api后面拼具体路径如果你手滑写成/api/v1后面请求会落到不存在的路由上。官网地址只用于注册、创建 Key、看用量不要填到配置文件里。另外模型 ID 不写死在配置里。Codex 支持用--model传模型名你可以打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 的模型广场从当前列出的模型里挑一个把它的 ID 作为参数。这样做的好处是TaoToken 后面上线新模型时你不需要频繁改 config.toml直接在命令行换一个模型 ID 就行。3. 让 Codex 生成 res/drawable/cursor.xml 并给 EditText 挂上 textCursorDrawable3.1 一句话说清需求Codex 返回 cursor.xml配置好之后在项目根目录跑下面这条命令codex exec --skip-git-repo-check \ --model 模型ID以模型广场列表为准 \ 在 Android 工程里新建一个 drawable 资源路径是 res/drawable/cursor.xml使用 rectangle shape宽度为 1dp颜色为 #3399dd然后给出布局中 EditText 使用这个 drawable 的 textCursorDrawable 写法。如果你更习惯交互式直接执行codex然后把同样的话粘贴进去也行。Codex 会根据你的描述生成两样东西一个cursor.xml以及一行android:textCursorDrawable属性。下面这段就是它应当给出的资源文件内容?xml version1.0 encodingutf-8? shape xmlns:androidhttp://schemas.android.com/apk/res/android android:shaperectangle solid android:color#3399dd / size android:width1dp / /shape这里的逻辑对应原来的第一步shaperectangle是标准光标外形size里的width1dp控制光标粗细color#3399dd把灰色变成蓝色。Codex 如果生成的元素顺序不一样不影响结果真正影响最终渲染的是width和color两个值不能缺。3.2 布局文件里补上 android:textCursorDrawable第二步是给目标 EditText 加上属性。假设你的输入框叫et_search那么在 layout 里应该看到类似这样的片段EditText android:idid/et_search android:layout_widthmatch_parent android:layout_heightwrap_content android:hint搜索商品 android:textCursorDrawabledrawable/cursor /属性名很长容易拼错正确的写法是android:textCursorDrawable大小写和 CamelCase 都不能变。Codex 生成后你不需要自己背这个属性只要把这段粘贴到对应布局即可。如果你的 EditText 使用了AppCompatEditText或MaterialTextInputEditText这个属性同样能传到原生绘制层只是在某些 Material 主题下光标高度会受到colorPrimary影响看起来比纯原生 EditText 短一点。遇到这种情况下一步再去改主题的colorControlActivated就能一起解决。3.3 Codex 只生成代码不在你机器上执行需要强调一点Codex 做的事是生成、解释、对照 Android 代码它不会替你运行 Gradle build也不会把文件直接写进你的res/drawable目录除非你显式让 Codex 的文件修改功能去创建但那也要你自己确认。我在测试时是让 Codex 输出完整文件内容再手动粘回 Android Studio 的。这样最稳妥因为 Codex 没有连接你的 Android 工程或设备它只通过 TaoToken 的 API 通道完成一次模型推理。你拿到的是一段可用的资源文件和属性最终是否生效由本地的 build 决定。4. 回到 TaoToken 后台看这次调用再在 Android Studio 里看光标4.1 用量页里确认 Model 和状态跑完上面的codex exec后打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 登录控制台进入用量或日志页面。你会看到刚才这次请求的记录包括模型 ID、token 数量、返回状态。这一步相当于给“Codex 已经接到 TaoToken 上”上了一个保险如果这里没有任何记录说明请求没有真正发出需要先检查 config.toml 里 base_url 是否写成了官网地址或者环境变量有没有生效。查看记录时重点关注状态码是不是 200。Codex 一次完整请求通常对应多条 token 流式日志在用量页里一般会聚合成一条调用记录。第一次跑通后时间、模型 ID、输入输出 token 都能对得上说明整条链路是通的。顺便也可以看看这次生成 cursor.xml 消耗的 token 数对成本有个概念。4.2 本机 build 后验证 #3399dd 是否生效把res/drawable/cursor.xml放进工程把android:textCursorDrawabledrawable/cursor写在目标 EditText 上然后在 Android Studio 里 Sync 并运行 app。进入带有输入框的页面点击输入框光标应当从原来的灰色变成亮蓝色#3399dd。如果颜色变了但光标看不见检查是否被软键盘挡住了如果完全没变跳到下一节的排障。如果你想先在另一种界面里验证同一个 Key也可以打开 TaoToken 模型对话 发同样的问题看模型输出是否一致。这个页面用的是同一个 Key/账号体系方便你排查是 Codex 配置问题还是模型本身问题。Key 的创建和吊销在 控制台 API Keys如果你打算高频使用 Codex可以再看看 Coding Plan 的套餐是否合适。5. 光标没变或 Codex 报错多半是这三个地方5.1 Base URL 多写 /v1 时 Codex 会怎么错最典型的配置错误是把https://taotoken.net/api写成https://taotoken.net/api/v1。Codex 的请求路径会变成/api/v1/chat/completions之类而 TaoToken 实际提供的是/api/...。这种情况下用量页里可能看不到任何记录codex 端会报 404 或 “not found”。解决办法就是把 config.toml 里的 base_url 改回/api重启 Codex 再试。5.2 drawable 没放进 res/drawabletextCursorDrawable 引用不到文件生成后如果放错目录比如放到res/drawable-v24/或res/mipmap/编译不会报错但drawable/cursor可能引用到错误版本或者根本找不到。保证cursor.xml在app/src/main/res/drawable/下文件命名全小写不要用连字符或中文。另外如果同一个工程里已经存在名为 cursor 的 drawable你可以改用cursor_highlight之类的名字然后同步修改布局里的drawable/cursor_highlight。5.3 codex 环境变量没带过去使用codex exec时如果是在当前终端里 export 的TAOTOKEN_API_KEY但在另一个终端窗口启动 Codex环境变量就丢失了。它会报认证失败或者让你重新登录。把 export 写进~/.bashrc、~/.zshrc或你常用的 shell 配置文件确保每次打开终端都能读到。不要直接把真实 Key 写在 config.toml 里虽然某些 provider 支持但环境变量方式更不容易泄露。下次再遇到某个控件样式说不清我会先把这个句子发给 Codex让它把资源文件和属性写出来然后在 TaoToken 后台对一下这次请求。你也可以把 Key 的名称改成codex-android这样每次在控制台都清楚是哪条调用链。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价