Android CoordinatorLayout与Behavior深度解析:实现Material Design高级交互
1. 项目概述为什么CoordinatorLayout是Android开发的“粘合剂”在Android应用开发中尤其是追求Material Design设计语言的应用里我们经常会遇到一些复杂的交互需求比如一个向上滑动时标题栏逐渐缩小、向下滑动时图片放大的详情页或者一个底部按钮点击后带动其他视图协同运动的界面。如果你尝试用传统的LinearLayout或RelativeLayout去硬编码这些动画和联动很快就会陷入计算视图位置、监听滚动事件、手动处理动画的泥潭代码臃肿且难以维护。这正是CoordinatorLayout诞生的背景它不是一个普通的容器而是一个**“协调者”**。你可以把它理解为一个交响乐团的指挥它本身不演奏乐器不直接绘制复杂内容但它能理解每个乐手子View的乐谱行为Behavior并指挥它们何时入场、如何配合最终奏出和谐的乐章。CoordinatorLayout继承自FrameLayout这意味着它默认情况下所有子View都是重叠在一起的。它的魔力核心在于Behavior——一个附着在子View上的插件化对象。通过Behavior一个子View可以感知到其他子View的布局、滚动、拖动、滑动等事件并据此调整自己的位置、大小或状态。这使得实现那些需要视图间联动的效果变得异常简单和声明化。无论是配合AppBarLayout实现可折叠标题栏还是配合FloatingActionButton实现点击时智能位移CoordinatorLayout都是Material Design组件库中不可或缺的基石。对于中高级开发者而言深入理解并掌握CoordinatorLayout和自定义Behavior是构建具有高级交互体验应用的关键一步。2. CoordinatorLayout核心机制与Behavior深度解析2.1 理解CoordinatorLayout的布局与测量流程虽然CoordinatorLayout继承自FrameLayout但它的onMeasure和onLayout过程被彻底重写了以集成Behavior的干预。其核心工作流程可以概括为“两次机会”测量前的干预在测量子View之前CoordinatorLayout会遍历所有子View如果该子View设置了Behavior则会调用Behavior.onMeasureChild()方法。Behavior可以在此处完全接管对该子View的测量例如它可以基于另一个兄弟View的大小来决定自身的大小。如果Behavior.onMeasureChild()返回true则CoordinatorLayout会跳过对该子View的默认测量逻辑。布局前的干预在确定所有子View的位置之前CoordinatorLayout会再次遍历子View及其Behavior调用Behavior.onLayoutChild()。这是Behavior发挥作用的最主要舞台。在这里Behavior可以决定子View的最终位置left, top, right, bottom。同样如果此方法返回trueCoordinatorLayout将不会为该子View执行默认的布局即FrameLayout那种堆叠布局。这种设计将布局的控制权极大地下放给了Behavior实现了极致的灵活性。一个经典的例子是FloatingActionButton.Behavior它可以在Snackbar出现时自动将FAB向上推移避免遮挡。这个“推移”的动作正是在onLayoutChild中通过计算Snackbar的位置并重新设置FAB的top坐标来实现的。2.2 Behavior交互协调的灵魂Behavior是一个抽象类定义在androidx.coordinatorlayout.widget包下。它是CoordinatorLayout与子View之间的契约。要使用Behavior通常有三种方式通过XML布局声明这是最常用、最声明式的方式。在子View的layout_behavior属性中指定全限定类名。androidx.coordinatorlayout.widget.CoordinatorLayout com.google.android.material.floatingactionbutton.FloatingActionButton app:layout_behaviorcom.google.android.material.floatingactionbutton.FloatingActionButton$Behavior/ /androidx.coordinatorlayout.widget.CoordinatorLayout通过注解绑定在自定义View的类上使用DefaultBehavior注解指定默认的Behavior类。这样只要在CoordinatorLayout中使用该View就会自动附着指定的Behavior。DefaultBehavior(MyCustomView.Behavior::class) class MyCustomView : View { // ... }在代码中动态设置通过CoordinatorLayout.LayoutParams的setBehavior()方法动态设置。Behavior的核心方法众多主要分为几类布局依赖layoutDependsOn()和onDependentViewChanged()。用于建立View之间的依赖关系。当被依赖的View发生变化时依赖它的View会得到回调。嵌套滚动onStartNestedScroll(),onNestedScroll(),onNestedPreScroll()等。用于处理复杂的嵌套滚动交互这是实现AppBarLayout滚动折叠的基石。触摸交互onInterceptTouchEvent()和onTouchEvent()。允许Behavior拦截和处理传递给子View的触摸事件。布局测量前面提到的onMeasureChild()和onLayoutChild()。注意Behavior的方法调用具有明确的顺序和条件。例如onStartNestedScroll会先于onNestedPreScroll被调用且只有前者返回true后续的嵌套滚动回调才会生效。理解这个生命周期对于编写正确的自定义Behavior至关重要。3. 经典搭档CoordinatorLayout与AppBarLayout实战3.1 构建可折叠的标题栏CollapsingToolbarLayout这是CoordinatorLayout最广为人知的应用场景。通过CoordinatorLayout、AppBarLayout、CollapsingToolbarLayout和Toolbar的组合可以轻松创建出视觉效果丰富的详情页头部。布局结构拆解androidx.coordinatorlayout.widget.CoordinatorLayout !-- 1. 可滚动的内容区域必须是NestedScrollView或RecyclerView等 -- androidx.core.widget.NestedScrollView app:layout_behaviorstring/appbar_scrolling_view_behavior !-- 关键此Behavior将内容与AppBar联动 -- !-- 你的主要内容 -- /androidx.core.widget.NestedScrollView !-- 2. 应用栏容器 -- com.google.android.material.appbar.AppBarLayout !-- 3. 可折叠的工具栏容器 -- com.google.android.material.appbar.CollapsingToolbarLayout app:layout_scrollFlagsscroll|exitUntilCollapsed|snap !-- 关键定义滚动行为 -- !-- 背景图或其他可折叠内容 -- ImageView app:layout_collapseModeparallax / !-- 视差滚动模式 -- !-- 4. 工具栏 -- androidx.appcompat.widget.Toolbar app:layout_collapseModepin/ !-- 固定模式折叠后仍显示 -- /com.google.android.material.appbar.CollapsingToolbarLayout /com.google.android.material.appbar.AppBarLayout /androidx.coordinatorlayout.widget.CoordinatorLayout关键属性解析app:layout_behaviorstring/appbar_scrolling_view_behavior这是一个预定义的字符串资源其值为androidx.coordinatorlayout.widget.AppBarLayout$ScrollingViewBehavior。它被设置在内容视图如NestedScrollView上使其滚动能驱动AppBarLayout的折叠与展开。app:layout_scrollFlags定义AppBarLayout直接子View通常是CollapsingToolbarLayout的滚动行为。scroll此View将随内容滚动一起滚动出屏幕。exitUntilCollapsedView在滚动出屏幕前会先折叠到其minHeight在CollapsingToolbarLayout上设置的最小高度。enterAlways任何向下的滚动都会立即让此View重新进入屏幕。snap在滚动停止时如果View的高度处于中间状态它会自动平滑地“吸附”到完全展开或完全折叠的状态。app:layout_collapseMode在CollapsingToolbarLayout的子View上设置。pin该子View在折叠过程中会保持固定位置直到Toolbar折叠到最小高度。parallax该子View在折叠时会产生视差滚动效果可以通过app:layout_collapseParallaxMultiplier默认0.5控制视差速率。3.2 处理复杂滚动冲突与自定义Behavior当你的界面中有多个可滚动区域或者需要实现非标准的联动效果时就需要深入自定义Behavior。例如实现一个ImageView在向上滑动时不仅AppBarLayout折叠这个ImageView自身也慢慢变透明。实操步骤创建自定义Behavior类class FadeImageBehavior(context: Context?, attrs: AttributeSet?) : CoordinatorLayout.BehaviorImageView(context, attrs) { // 1. 建立依赖关系我们依赖AppBarLayout的状态 override fun layoutDependsOn(parent: CoordinatorLayout, child: ImageView, dependency: View): Boolean { return dependency is AppBarLayout } // 2. 当依赖的ViewAppBarLayout发生变化时调用 override fun onDependentViewChanged(parent: CoordinatorLayout, child: ImageView, dependency: View): Boolean { if (dependency is AppBarLayout) { // 计算AppBarLayout的折叠比例 (0为完全展开1为完全折叠) val appBar dependency val totalScrollRange appBar.totalScrollRange // 总可滚动范围 val currentScroll -appBar.y // 当前垂直偏移量向上滚动为负取反得正 val fraction (currentScroll / totalScrollRange).coerceIn(0f, 1f) // 根据比例设置ImageView的透明度 child.alpha 1 - fraction // 还可以做其他动画比如缩放、平移 // child.scaleX 1 - fraction * 0.5f // child.translationY -child.height * fraction return true // 返回true表示消费了这次变化 } return false } }在布局文件中应用androidx.coordinatorlayout.widget.CoordinatorLayout com.google.android.material.appbar.AppBarLayout ... !-- ... -- /com.google.android.material.appbar.AppBarLayout ImageView app:layout_behavior.yourpackage.FadeImageBehavior / /androidx.coordinatorlayout.widget.CoordinatorLayout实操心得在onDependentViewChanged中进行的计算要尽可能高效因为它在滚动过程中会被频繁调用。避免在这里进行耗时操作或创建新的对象。另外注意处理好比例系数的边界情况使用coerceIn避免出现意外的数值。4. 进阶应用嵌套滚动与自定义交互4.1 实现一个仿知乎的底部输入栏联动假设我们需要实现一个类似知乎回答列表的界面底部有一个固定的输入栏当用户向上滚动列表时输入栏随之隐藏向下滚动时输入栏显示。同时当Snackbar从底部弹出时输入栏需要上移避免重叠。方案设计我们可以为底部的输入栏假设是一个LinearLayout自定义一个Behavior。这个Behavior需要做两件事监听内容RecyclerView的嵌套滚动根据滚动方向控制自身的显示和隐藏通过平移动画。依赖Snackbar或其承载布局Snackbar.SnackbarLayout在其出现时调整自身位置。核心代码实现class BottomInputBarBehavior(context: Context?, attrs: AttributeSet?) : CoordinatorLayout.BehaviorLinearLayout(context, attrs) { private var isHidden false private var childHeight 0 // 依赖Snackbar override fun layoutDependsOn(parent: CoordinatorLayout, child: LinearLayout, dependency: View): Boolean { return dependency is Snackbar.SnackbarLayout } override fun onDependentViewChanged(parent: CoordinatorLayout, child: LinearLayout, dependency: View): Boolean { if (dependency is Snackbar.SnackbarLayout) { // 将输入栏上移高度与Snackbar的顶部对齐 val translationY min(0f, dependency.translationY - dependency.height) child.translationY translationY return true } return false } override fun onDependentViewRemoved(parent: CoordinatorLayout, child: LinearLayout, dependency: View) { // Snackbar消失后恢复输入栏位置但需考虑自身的隐藏状态 if (dependency is Snackbar.SnackbarLayout) { child.translationY if (isHidden) child.height.toFloat() else 0f } } // 处理嵌套滚动实现滚动隐藏/显示 override fun onStartNestedScroll(coordinatorLayout: CoordinatorLayout, child: LinearLayout, directTargetChild: View, target: View, axes: Int, type: Int): Boolean { // 只关心垂直滚动 return axes ViewCompat.SCROLL_AXIS_VERTICAL } override fun onNestedPreScroll(coordinatorLayout: CoordinatorLayout, child: LinearLayout, target: View, dx: Int, dy: Int, consumed: IntArray, type: Int) { if (dy 0 !isHidden) { // 向上滚动隐藏输入栏 hide(child) isHidden true } else if (dy 0 isHidden) { // 向下滚动显示输入栏 show(child) isHidden false } } private fun hide(view: View) { if (childHeight 0) { childHeight view.height } view.animate().translationY(childHeight.toFloat()).setDuration(300).start() } private fun show(view: View) { view.animate().translationY(0f).setDuration(300).start() } }这个Behavior同时处理了两种协调关系与Snackbar的依赖关系以及与滚动目标的嵌套滚动关系。它展示了如何在一个Behavior中整合多种交互逻辑。4.2 性能优化与陷阱规避虽然CoordinatorLayout和Behavior功能强大但使用不当也会带来性能问题。过度绘制CoordinatorLayout默认背景是透明的且子View可能重叠。如果层级复杂容易导致过度绘制。建议使用Android Studio的“Layout Inspector”和“Profile GPU Rendering”工具检查。为不透明的子View设置背景色避免底层绘制穿透。精简CoordinatorLayout的子View数量复杂的部分可以用include或ViewStub管理。测量/布局性能自定义Behavior中的onMeasureChild和onLayoutChild会被频繁调用。确保其中的计算逻辑轻量。缓存计算结果避免重复运算。在onLayoutChild中如果改变了子View的位置务必调用parent.onLayoutChild()对受影响的兄弟View进行重新布局或者通过requestLayout()触发新一轮的布局流程但要小心循环调用。嵌套滚动冲突当多个Behavior都尝试处理嵌套滚动时可能会发生冲突。CoordinatorLayout通过onStartNestedScroll的返回值来确定由哪个Behavior来消费滚动事件。如果多个Behavior都返回true则它们会按照添加顺序通常是Z轴顺序接收到后续滚动事件。在设计时应确保Behavior的职责单一避免一个滚动被多个Behavior处理造成混乱。5. 常见问题排查与调试技巧实录在实际开发中遇到CoordinatorLayout不按预期工作的情况很常见。下面是一些典型问题及其排查思路。5.1 问题速查表问题现象可能原因排查步骤与解决方案AppBarLayout完全无法滚动折叠1. 内容视图未设置app:layout_behavior。2. 内容视图不是可嵌套滚动的视图如ScrollView而非NestedScrollView。3.AppBarLayout的子View未设置scrollFlags。1. 检查内容视图的app:layout_behavior属性是否为string/appbar_scrolling_view_behavior。2. 确保内容视图是NestedScrollView、RecyclerView或实现了NestedScrollingChild接口的视图。3. 检查AppBarLayout的直接子View是否设置了app:layout_scrollFlags且包含scroll值。滚动时抖动或卡顿1. 自定义Behavior中的onDependentViewChanged或onNestedScroll计算过于复杂。2. 布局层次过深过度绘制严重。3. 动画未使用硬件加速或ViewPropertyAnimator。1. 使用性能分析工具定位耗时方法优化计算逻辑缓存变量。2. 简化布局使用ConstraintLayout减少嵌套移除不必要的背景。3. 确保动画使用View.animate()或属性动画并考虑在onScroll中减少UI更新频率如使用差值器或节流。FAB不随Snackbar上移1. FAB未设置正确的BehaviorMaterial库的FAB默认已设置。2.Snackbar未使用CoordinatorLayout作为父容器。1. 确认FAB使用的是com.google.android.material.floatingactionbutton.FloatingActionButton其默认带有Behavior。2. 确保Snackbar.make()的第一个参数是CoordinatorLayout实例或其子View。自定义Behavior完全不生效1.Behavior类路径在XML中写错。2.Behavior的关键方法如layoutDependsOn,onStartNestedScroll未正确重写或返回值错误。3. 子View的LayoutParams类型不是CoordinatorLayout.LayoutParams。1. 检查XML中的app:layout_behavior属性值确保是全限定类名且无拼写错误。2. 在Behavior的方法中打日志确认其被调用且返回了预期的true/false。3. 确保子View直接位于CoordinatorLayout下否则其LayoutParams可能不是正确的类型。多个Behavior之间互相干扰多个Behavior对同一事件如滚动都返回true导致行为冲突。理清交互逻辑确保一个交互事件最好只由一个主要的Behavior消费。可以通过调整View的Z轴顺序XML中后写的在上层来改变Behavior的接收顺序或在onStartNestedScroll中根据条件更精确地返回true/false。5.2 调试技巧让Behavior“开口说话”当逻辑复杂时仅靠猜测很难定位问题。我常用的调试方法有日志注入法在自定义Behavior的每个回调方法开始处打印日志带上关键参数。override fun onStartNestedScroll(...): Boolean { Log.d(TAG, onStartNestedScroll: target$target, dy$dy, axes$axes) val result axes ViewCompat.SCROLL_AXIS_VERTICAL Log.d(TAG, onStartNestedScroll returning: $result) return result }通过日志流可以清晰地看到Behavior的生命周期和决策过程。布局边界与过度绘制在开发者选项中开启“显示布局边界”和“显示过度绘制区域”。这能直观地看到CoordinatorLayout及其子View的测量布局区域以及是否存在严重的过度绘制尤其是半透明重叠区域。使用Android Studio Layout Inspector在运行应用时使用Layout Inspector可以实时查看视图树、每个View的属性包括通过Behavior计算后的位置translationX/Y以及LayoutParams。这对于确认Behavior是否被正确附着、属性值是否被正确修改非常有帮助。编写小型测试用例当遇到一个复杂的联动效果不生效时不要在主项目中盲目修改。可以新建一个最简单的Demo Activity只包含CoordinatorLayout和涉及到的少数几个View逐步添加Behavior和逻辑。这能有效隔离环境干扰快速验证Behavior本身的正确性。踩过几次坑之后我的体会是CoordinatorLayout的调试核心在于理解“事件流”和“状态流”。事件流触摸、滚动如何被Behavior拦截和消费状态流依赖View的位置变化如何触发onDependentViewChanged把这两条线理清了大部分问题都能迎刃而解。最后别忘了官方Material Components库中提供了大量现成的、经过充分测试的Behavior如AppBarLayout.ScrollingViewBehavior,FloatingActionButton.Behavior等在实现常见效果时优先查阅官方文档和源码往往能事半功倍。

相关新闻

大模型推理性能优化:从TTFT、ITL到Total Latency的实战解析

大模型推理性能优化:从TTFT、ITL到Total Latency的实战解析

1. 从“慢半拍”到“丝滑对话”:为什么我们需要关注大模型推理指标? 最近在跟几个做应用落地的朋友聊天,他们都在抱怨同一个问题:自家基于大模型开发的智能客服或者文档助手,在用户实际使用时,总感觉“慢半…

2026/10/18 19:15:10 阅读更多 →
Java前后端联调避坑指南:从接口契约到环境配置的实战经验总结

Java前后端联调避坑指南:从接口契约到环境配置的实战经验总结

1. 项目概述:联调中的“低级错误”为何频发?前后端联调,听起来像是两个团队在友好地握手,共同完成一个功能。但干过这行的都知道,这更像是两个说着不同方言的人,试图在信号不好的电话里商量一件复杂的事。你…

2026/10/17 22:32:55 阅读更多 →
从零代码录制到工程化实践:Playwright自动化测试与网页操作全解析

从零代码录制到工程化实践:Playwright自动化测试与网页操作全解析

1. 从“手写脚本”到“录制回放”:自动化思维的转变 如果你和我一样,在几年前接触自动化测试或者网页操作自动化,第一反应大概率是打开浏览器开发者工具,吭哧吭哧地分析页面结构,然后写下一大段Selenium的定位代码。调…

2026/10/16 3:51:50 阅读更多 →

最新新闻

AI可复现性挑战:固定随机种子、锁定环境,让训练结果稳定复现

AI可复现性挑战:固定随机种子、锁定环境,让训练结果稳定复现

1. 从一次“幽灵复现失败”说起:到底什么是AI的可复现性挑战前阵子我把一台GPU服务器上的旧训练任务重新跑了一遍,用的确实是当时的代码、当时的数据文件、当时的依赖环境,结果AUC从0.713变成了0.704。当时我的第一反应不是“代码写错了”&am…

2026/10/19 3:13:03 阅读更多 →
从零构建计算机网络知识体系:分层、封装与核心概念详解

从零构建计算机网络知识体系:分层、封装与核心概念详解

1. 为什么我要从零写一个计算机网络专栏做开发这些年,被问得最多的问题里,“怎么学计算机网络”绝对排得进前三。每次有新人问我该看什么书、该刷什么题,我都想起自己当年抱着那本厚得能当枕头的经典教材,从物理层啃到应用层&…

2026/10/19 3:13:03 阅读更多 →
Vue3——第 2 篇:开发环境搭建与第一个 Vue 应用

Vue3——第 2 篇:开发环境搭建与第一个 Vue 应用

本篇定位:在理解 Vue 的基本概念之后,我们需要真正"把代码跑起来"。本篇将带你从零开始,一步步搭建 Vue 3 开发环境,创建并运行你的第一个 Vue 应用,并深入理解项目目录结构。读完本篇,你将拥有一…

2026/10/19 3:13:03 阅读更多 →
Vue3——第 3 篇:模板语法——从插值到指令的全面掌握

Vue3——第 3 篇:模板语法——从插值到指令的全面掌握

本篇定位:模板语法是 Vue 的"视图层语言",是你每天编写 Vue 代码时打交道最多的部分。本篇将系统讲解 Vue 模板中的所有语法规则——从简单的文本插值到强大的指令系统,让你彻底掌握"如何把数据变成用户看到的界面"。读完…

2026/10/19 3:13:03 阅读更多 →
用siege做高并发压测:从入门到实战的完整指南

用siege做高并发压测:从入门到实战的完整指南

做Web开发的人,迟早要面对一个问题:系统到底能扛住多少并发?网上把并发数喊到一万两万的不少,可真到上线那一秒,接口被打穿、数据库连接池占满、页面直接白屏,这种事我见过太多次了。说到底,很多…

2026/10/19 3:13:03 阅读更多 →
企业级提示词工程系统化实践:从资产管理到自动化闭环

企业级提示词工程系统化实践:从资产管理到自动化闭环

1. 从零散提示词到企业级提示词资产聊到提示词工程,很多团队还停留在“某个人的编辑器里存着一堆好用的 prompt,谁要用找他要”的阶段。我在多个项目里见过这种状态,最开始效率不算低,一个人能写出质量不错的提示词,自…

2026/10/19 3:12:02 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →