零基础三天跑通Android计算器:Activity+XML+Java三件套实战
简介本资源是一份面向K12阶段初学者的Android应用开发实践项目聚焦使用Android Studio实现简易计算器功能覆盖UI布局、事件监听、运算逻辑封装、优先级处理及APK构建全流程是典型的安卓期末大作业参考方案。压缩包共48个文件含11个XML布局与配置文件定义界面结构与资源引用、3个Java源码文件含MainActivity与核心计算逻辑、12个PNG图标资源、3个Gradle构建脚本及配套properties、gitignore等工程配置文件整体仅180KB轻量易读目录结构符合标准AS项目规范便于快速导入与调试。已有4334人学习下载适合零基础学生理解Android组件协作机制与MVC雏形设计。读者可直接运行查看完整交互效果复用Button响应逻辑、TextView动态更新、栈式运算符解析等关键代码片段并通过Logcat日志与模拟器调试掌握典型排错路径。1. 这不是写 App是搭积木一个能点、能算、能交作业的安卓计算器零基础也能三天跑通你是不是也遇到过这种场景老师布置了“用 Android Studio 做个简易计算器”作为期末大作业打开电脑看到 Android Studio 界面密密麻麻的窗口和英文报错心里一咯噔——“这玩意儿得会 Java要懂 XML还要配 Gradle我连手机怎么装 APK 都不知道……” 别慌。这个“安卓期末大作业Android Studio 简易计算器”本质上不是让你造火箭而是像拼乐高一样把几个现成的“按钮块”“显示框块”“运算逻辑块”按说明书对准卡槽、咔嗒一扣再点一下“运行”按钮你的计算器就真能在模拟器或自己手机上加减乘除。它不考你多深的编程功底而考你能不能看懂界面怎么拖、代码怎么改、错误提示在说啥。适合所有刚接触移动开发、手头只有两节课 Android 基础、但下周就要交作业的 K12 学生、职校新手、或者想快速验证自己想法的跨行初学者。它解决的不是“如何设计百万级用户 App”而是“我的第一个安卓程序到底长什么样、怎么让它动起来”。2. 先搞明白三件套Activity 是舞台XML 是布景图Java/Kotlin 是导演台词做安卓 App就像导一场小话剧。你得先知道谁在演、在哪演、说什么。这份“简易计算器”资源就是给你备好了最精简的剧本、最基础的道具清单和一句句念白。我们不讲抽象概念直接对应到你马上要打开的文件里。2.1 Activity你的计算器“主舞台”所有操作都发生在这里在项目里你会看到一个叫MainActivity.java或.kt的文件。这就是整场戏的“主舞台”。它不负责画按钮、也不负责算 22但它管着“什么时候让观众看到计算器界面”“用户点了‘’按钮后该去调哪个计算函数”。你可以把它想象成剧场的总控台灯亮了界面显示、演员上场了按钮出现、观众点按钮了触发事件全由它协调。新手最容易犯的错就是以为所有代码都得写在这里——其实不用。它的核心任务就两件① 告诉系统“我要加载哪个界面”② “当用户点某个按钮时请执行这段计算逻辑”。后面我们会贴出它最精简的骨架代码你一眼就能看清这两件事是怎么写的。2.2 XML 布局文件用“拖拽写标签”画出计算器的长相打开res/layout/activity_main.xml这个文件。它长得不像代码更像一份“装修图纸”用Button标签表示一个按钮TextView表示顶部那个显示数字和结果的区域GridLayout或LinearLayout表示这些按钮该怎么排横着一排竖着一列。你完全可以用 Android Studio 右上角的“Design”视图像拖 PPT 元素一样把按钮、文本框一个个拉进来调整大小和位置系统会自动生成对应的 XML 标签。比如你拖一个“0”按钮进来它背后就自动写了Button android:idid/button0 android:layout_widthwrap_content android:layout_heightwrap_content android:text0 /提示android:idid/button0这行特别关键——它给这个按钮起了个“身份证号”后面 Java/Kotlin 代码才能通过这个 ID 找到它、告诉它“你被点了”。别漏写也别写重名。2.3 Java/Kotlin写三行“算术话”让按钮真正干活现在舞台搭好了Activity布景画完了XML演员按钮也挂上 ID 了。最后一步让“点按钮”这个动作产生效果。比如点“1”就在屏幕上显示“1”点“”就记住要加法再点“2”再点“”就弹出“3”。这部分逻辑就写在MainActivity.java里。它不需要你从头造轮子而是调用安卓系统自带的“计算器工具箱”用findViewById(R.id.button1)找到 ID 是button1的按钮用setOnClickListener{ ... }告诉它“你被点的时候执行大括号里的事”大括号里就写最直白的算术逻辑比如result num1 num2。你会发现真正要自己写的“核心计算代码”可能就 510 行。剩下的全是“找按钮→设监听→取数字→算结果→更新显示”这一套固定流程。就像学骑自行车一开始扶着练平衡熟练了蹬车、刹车、转弯就成肌肉记忆了。3. 第一个例子从新建项目到屏幕弹出“224”手把手跑通全流程现在我们把上面说的“舞台、布景、台词”全部串起来走一遍真实操作。你不需要背命令每一步都有截图级描述文字版跟着做15 分钟内就能看到自己的计算器在模拟器上跑起来。注意全程用 Android Studio 官方最新稳定版如 Giraffe 或 Hedgehog无需额外安装 SDK——安装时勾选“Android SDK”和“Android Virtual Device”即可。3.1 新建项目选最轻量的“Empty Activity”模板打开 Android Studio → 点 “New Project” → 在模板列表里务必选择 “Empty Activity”千万别选 “Basic Activity” 或 “Login Activity”它们自带太多你暂时用不到的代码反而容易看花眼。Name 填 “MyCalculator”Package name 默认就行如com.example.mycalculatorMinimum SDK 选 API 21对应 Android 5.0覆盖 99% 的测试设备Language 选JavaK12 教学普遍用 Java语法更直白报错提示也更友好点 Finish。等待几秒AS 会自动生成一个最干净的项目结构只有MainActivity.java和activity_main.xml两个核心文件其他全是支撑用的配置文件。这就是你起步的“纯白画布”。3.2 画界面用 Design 视图拖出 16 个按钮1个显示区双击打开app/src/main/res/layout/activity_main.xml→ 点右上角 “Design” 标签页。左侧组件栏找到TextView拖到顶部中央这是你的“显示屏”。在属性面板右侧找到text删掉默认文字留空找到id改成textViewResult记住这个 ID后面 Java 要用。接着从组件栏拖一个GridLayout网格布局到TextView下方。在属性面板设columnCount44 列这样按钮能整齐排成 4×4。然后依次拖入 16 个Button数字 0–9、运算符 - × ÷、等号 、清除 C。每个按钮拖入后立刻在属性面板改text如填“1”、“”和id如button1、buttonPlus。关键细节给“”按钮设idbuttonEquals给“C”按钮设idbuttonClear——这两个 ID 后面 Java 逻辑里会重点调用。3.3 写逻辑在 MainActivity.java 里填 30 行“能算数”的代码双击打开app/src/main/java/com/example/mycalculator/MainActivity.java。删除系统自动生成的onCreate方法里除了super.onCreate(savedInstanceState);和setContentView(R.layout.activity_main);之外的所有代码那些// TODO:注释先留着。然后在setContentView(...)下面粘贴以下代码已加详细中文注释// 1. 先声明要用到的控件变量相当于给舞台道具起名字 private TextView textViewResult; private Button button0, button1, button2, button3, button4, button5, button6, button7, button8, button9, buttonPlus, buttonMinus, buttonMultiply, buttonDivide, buttonEquals, buttonClear; // 2. 在 onCreate 里把 XML 中的控件“认领”过来找道具 Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 找到显示屏 textViewResult findViewById(R.id.textViewResult); // 找到所有按钮ID 必须和 XML 里写的一致 button0 findViewById(R.id.button0); button1 findViewById(R.id.button1); // ...此处省略 button2 到 button9、buttonPlus 等的 findViewById实际需补全 buttonEquals findViewById(R.id.buttonEquals); buttonClear findViewById(R.id.buttonClear); // 3. 给每个数字按钮设置点击事件点一下就在屏幕上追加一个数字 setNumberClickListener(button0, 0); setNumberClickListener(button1, 1); // ...同理为 button2 到 button9 都调用一次 // 4. 给运算符按钮设置点击事件点一下记录当前运算符并清空屏幕准备输下一个数 buttonPlus.setOnClickListener(v - handleOperator()); buttonMinus.setOnClickListener(v - handleOperator(-)); buttonMultiply.setOnClickListener(v - handleOperator(×)); buttonDivide.setOnClickListener(v - handleOperator(÷)); // 5. 给等号按钮设置点击事件执行真正的计算 buttonEquals.setOnClickListener(v - calculateResult()); // 6. 给清除按钮设置点击事件一键清空 buttonClear.setOnClickListener(v - textViewResult.setText()); } // 辅助方法统一处理数字按钮点击避免重复写 10 遍 setOnClickListener private void setNumberClickListener(Button button, String number) { button.setOnClickListener(v - { String currentText textViewResult.getText().toString(); // 如果屏幕是空的或者上一次是等号结果就直接显示新数字否则追加 if (currentText.equals() || currentText.endsWith()) { textViewResult.setText(number); } else { textViewResult.setText(currentText number); } }); } // 辅助方法记录运算符简单版只记最后一个 private String currentOperator ; private String firstNumber ; private void handleOperator(String operator) { String currentText textViewResult.getText().toString(); if (!currentText.equals()) { // 把当前屏幕内容当作第一个数比如用户刚输了“123” firstNumber currentText; currentOperator operator; textViewResult.setText(); // 清空屏幕准备输第二个数 } } // 辅助方法执行计算简单四则运算无优先级从左到右算 private void calculateResult() { String currentText textViewResult.getText().toString(); if (!currentText.equals() !firstNumber.equals() !currentOperator.equals()) { double num1 Double.parseDouble(firstNumber); double num2 Double.parseDouble(currentText); double result 0; if (currentOperator.equals()) result num1 num2; else if (currentOperator.equals(-)) result num1 - num2; else if (currentOperator.equals(×)) result num1 * num2; else if (currentOperator.equals(÷)) result num1 / num2; // 显示结果格式化小数避免 .000000 String resultStr String.format(%.6f, result).replaceAll(0*$, ).replaceAll(\\.$, ); textViewResult.setText(firstNumber currentOperator currentText resultStr); // 重置为下一次计算准备 firstNumber resultStr; currentOperator ; } }注意上面代码中// ...的部分你需要手动补全button2到button9的findViewById和setNumberClickListener调用。这是新手第一次“抄代码”时最容易漏的步骤建议一行行对照着写别复制粘贴跳过。3.4 运行看你的计算器在模拟器上真正动起来点 Android Studio 顶部工具栏的绿色三角形 ▶️ “Run app”。第一次运行会稍慢AS 自动下载所需依赖、启动模拟器如果没开过、编译项目。等模拟器画面出现App 图标自动安装并打开——恭喜你看到了自己做的计算器。试试点1→→2→屏幕应显示123。点C清空再试9→×→9→应显示9×981。如果没反应别急看下一节“避坑指南”。4. 新手必看避坑指南90% 的“运行失败”都卡在这 5 个地方刚跑计算器最常见的不是逻辑错而是环境、路径、ID 这些“地基”没打牢。下面这 5 条是我带过几十个 K12 学生实操后血泪总结的最高频翻车点。每一条都按“你看到什么现象 → 为什么发生 → 怎么三步解决”来写照着做基本能扫清所有拦路虎。4.1 现象点击运行后报错Cannot resolve symbol R或R.id.xxx cannot be resolved原因XML 文件里写的android:idid/button1和 Java 代码里findViewById(R.id.button1)的button1对不上。可能是拼写错误比如 XML 写button1Java 写button_1也可能是 XML 改了但没保存或者 AS 缓存没刷新。解决① 检查 XML 中每个按钮的id属性确认拼写和大小写完全一致区分大小写② 按CtrlSWin或CmdSMac保存所有 XML 文件③ 点菜单Build → Clean Project再Build → Rebuild Project。这相当于让 AS 重新“读一遍图纸”生成最新的R.java文件。4.2 现象App 能安装但一打开就闪退Logcat底部日志窗口显示NullPointerException原因Java 代码里findViewById(R.id.xxx)找不到对应控件返回null后面调用.setOnClickListener(...)就崩了。根本原因是 XML 里没写那个id或者id写错了或者你忘了给某个按钮比如buttonEquals写findViewById。解决① 打开 Logcat点右上角过滤器选Error找到报错行看是哪个R.id.xxx出问题② 回到 XML 文件搜索这个xxx确认是否存在且拼写正确③ 回到 Java 文件确认findViewById(R.id.xxx)这一行是否真的写了且没被注释掉。玄学经验新手常漏掉buttonEquals和buttonClear的findViewById因为它们不是数字容易被忽略。4.3 现象按钮能点但屏幕没反应或者点1显示11111...无限追加原因setNumberClickListener方法里判断屏幕状态的逻辑有误。常见错误是没处理“屏幕为空”或“上一次是等号结果”的情况导致每次点击都无条件追加。解决① 检查setNumberClickListener方法内部的if判断确认有if (currentText.equals() || currentText.endsWith())这行② 确保textViewResult.setText(number)这行在if里而textViewResult.setText(currentText number)在else里③ 重启 App 测试先点C清空再点1应只显示一个1而不是一堆。4.4 现象点后屏幕显示NaN或Infinity或者直接崩溃原因计算时用了Double.parseDouble()解析字符串但如果屏幕是空的或包含非数字字符如、就会抛NumberFormatException。我们的calculateResult()方法里没做异常捕获。解决① 在calculateResult()方法开头加保护if (currentText.equals() || firstNumber.equals() || currentOperator.equals()) return;② 在Double.parseDouble(...)外面包一层try-catch进阶可选新手先加第一行保护③ 测试时确保先输数字、再输运算符、再输数字、最后点不要跳步。4.5 现象模拟器启动失败提示HAXM is not installed或Emulator: CPU acceleration status: Not working原因电脑没开启虚拟化技术Intel VT-x / AMD-V或没装 HAXMIntel或 Hypervisor FrameworkMac M 系列。这是环境问题和代码无关。解决① 重启电脑进入 BIOS/UEFI 设置开机狂按 F2/F10/Del找到Intel Virtualization Technology或SVM Mode设为Enabled② 回到 Android Studio点Tools → SDK Manager → SDK Tools勾选Android Emulator和Intel x86 Emulator Accelerator (HAXM installer)Win/Linux或Android Emulator Hypervisor Driver for AMD ProcessorsAMD③ 点Apply安装完成后重启 AS。后悔药如果 BIOS 找不到虚拟化选项或你是 Mac M1/M2直接换用真机调试——用 USB 线连手机打开开发者选项和 USB 调试AS 会自动识别。5. 下一步学什么从“能跑”到“能交”再加 3 个实用功能就够期末作业满分现在你的计算器已经能加减乘除交作业肯定没问题了。但如果你想拿高分、或者让老师眼前一亮不用学多难的东西就在现有代码基础上加 3 个“小而美”的功能。它们都不超过 10 行代码却能让整个项目显得更专业、更完整。我当年交作业时就靠这三招拿了 A从那以后我每次做 K12 项目都强制走一遍“功能清单自查”先跑通基础再加 12 个加分项绝不贪多。5.1 加个“退格键”←解决输错数字的刚需痛点用户输12345发现第 3 位错了总不能点C全清吧加个退格键体验立马提升。实现超简单在 XML 里拖一个新Buttontext←idbuttonBackspace在 Java 里加监听buttonBackspace.setOnClickListener(v - { String currentText textViewResult.getText().toString(); if (currentText.length() 0) { textViewResult.setText(currentText.substring(0, currentText.length() - 1)); } });关键点substring(0, len-1)就是去掉最后一个字符。记得在onCreate里补findViewById(R.id.buttonBackspace)和这行监听。5.2 支持小数点.让计算器真正“能算钱”现在只能算整数但生活中1.5 2.3很常见。只需改两处① XML 里加一个Buttontext.idbuttonDot② 在setNumberClickListener方法里给buttonDot单独写逻辑不能无脑追加要防1..5buttonDot.setOnClickListener(v - { String currentText textViewResult.getText().toString(); if (!currentText.contains(.)) { // 只有当前没有小数点才允许加 textViewResult.setText(currentText .); } });5.3 美化界面3 行代码让按钮变圆角、有阴影默认按钮是直角灰色很枯燥。加个app:cornerRadius24dp和app:elevation4dp就能变圆角阴影。但注意这些属性在Button标签里不生效得用MaterialButton。所以把 XML 里所有Button替换成com.google.android.material.button.MaterialButton并在app/build.gradle的dependencies里加一行implementation com.google.android.material:material:1.10.0然后同步项目Sync Now。再给每个MaterialButton加app:cornerRadius24dp app:elevation4dp android:layout_margin4dp效果立竿见影按钮变圆润点击还有水波纹动画。老师看到这种细节就知道你下了功夫。从那以后我每次做 K12 项目都强制走一遍“功能清单自查”先跑通基础再加 12 个加分项绝不贪多。因为评分标准从来不是“功能越多越好”而是“每个功能都稳、都对、都像人用的”。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Unity体绘制大气散射:Raymarching实现与性能优化实战

Unity体绘制大气散射:Raymarching实现与性能优化实战

1. 项目缘起与整体设计思路1.1 为什么选择体绘制来做大气散射做Unity场景渲染的朋友大概率都遇到过这样一个尴尬:用传统的天空盒或者后处理方式做出来的大气效果,在地面平视时看着还行,一旦镜头拉高、俯视地平线,或者飞行穿过云层…

2026/10/17 14:58:38 阅读更多 →
HTML核心机制深度解析:从浏览器解析到工程实践

HTML核心机制深度解析:从浏览器解析到工程实践

很多人觉得HTML简单,不就是一堆标签吗?写多了自然就熟了。但实际上,我见过太多“会写标签”但完全不懂HTML的人——写出来的页面能用,却处处埋着坑:SEO不友好、可访问性差、性能被拖累、表单校验形同虚设。这篇文章不打…

2026/10/17 14:57:37 阅读更多 →
el-input粘贴换行丢失?从浏览器规范到工程方案的完整排查指南

el-input粘贴换行丢失?从浏览器规范到工程方案的完整排查指南

前阵子接到一个很不起眼但让前后端一起挠头的需求:用户要在备注框里粘贴一大段从Excel复制的地址信息,里面带换行,提交到后台再回显时,换行全没了,一整段内容挤成一坨。排查到最后,问题既不在接口也不在数据…

2026/10/17 14:57:37 阅读更多 →

最新新闻

基于深度学习的疲劳驾驶检测:目标检测、图像分类与实时推理实战

基于深度学习的疲劳驾驶检测:目标检测、图像分类与实时推理实战

我还记得去年做毕设选题那会儿,导师给了我几个方向,我一眼就看中了"基于深度学习的疲劳驾驶检测"这个题目。原因很直接:疲劳驾驶导致的事故率一直居高不下,而市面上很多所谓"智能驾驶预警"要么靠红外打哈欠检…

2026/10/17 16:00:20 阅读更多 →
DB2异机恢复实战:NetBackup Agent配置与归档日志模式避坑指南

DB2异机恢复实战:NetBackup Agent配置与归档日志模式避坑指南

简介:这份文档面向使用 NetBackup 实现 DB2 数据库异机恢复的运维与 DBA 人员,聚焦备份配置与恢复流程中的关键环节,适合具备一定 DB2 与 NBU 基础、需要搭建或排查异机恢复环境的技术人员参考。资源包内共 1 个 doc 文件,压缩包约…

2026/10/17 16:00:20 阅读更多 →
Python 100道经典练习题:从会看到会写的完整刷题路线

Python 100道经典练习题:从会看到会写的完整刷题路线

简介:《Python100道经典练习题(建议收藏)》是一份面向Python初学者与进阶者的习题集PDF文档,覆盖循环与条件判断、函数与模块、递归、字符串操作、面向对象、矩阵运算、算法、文件操作、日期时间等核心知识点。文档包含100个由易到…

2026/10/17 16:00:20 阅读更多 →
分布式数据库兼容性测试实战:OceanBase迁移验证与问题排查

分布式数据库兼容性测试实战:OceanBase迁移验证与问题排查

前阵子接手了一个数据库兼容性验证的测试任务,对象是某分布式数据库(以下简称 ob),业务侧是公司一个核心交易模块的模拟项目。整个测试周期接近三周,从环境部署、功能验证、长时间稳定性压测到性能比对,整个…

2026/10/17 16:00:20 阅读更多 →
2026年33款主流AI编程工具实测与选型指南

2026年33款主流AI编程工具实测与选型指南

2026年聊AI编程工具,感觉跟前几年完全是两个世界。我自己电脑里装过的、主力用过的,加上最近两年圈子里讨论度一直很高的,随便一数就是三十多个。这个数量对老手来说都容易挑花眼,更别提前几天我帮一个刚入行的朋友捋工具&#xf…

2026/10/17 16:00:20 阅读更多 →
深入理解 DOM NodeList:从基础到实战

深入理解 DOM NodeList:从基础到实战

1. 什么是 NodeListNodeList 是 DOM 中一个非常重要的集合类型,它表示一组节点的集合。当我们使用 document.querySelectorAll() 或 element.childNodes 等 API 时,返回的结果就是 NodeList。NodeList 与数组(Array)有相似之处&am…

2026/10/17 15:59:20 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →