尧图精选

web-to-app 浏览器工具栏配置详解:browserToolbarEnabled 主开关、七个子项开关与预览/导出共用渲染规则

🕒 发布时间:2026/9/17 19:36:50 📁 来源:尧图网络
web-to-app 浏览器工具栏配置详解browserToolbarEnabled 主开关、七个子项开关与预览/导出共用渲染规则【免费下载链接】web-to-appThe most full featured web-to-app toolkit on Android, a complete APK workshop that runs entirely on your phone项目地址: https://gitcode.com/GitHub_Trending/web/web-to-app本文围绕 web-to-app「编辑通用配置」中的浏览器工具栏Browser Toolbar卡片展开讲清browserToolbarEnabled主开关与七个toolbarShow*子项开关的完整语义、默认值与联动规则并结合仓库源码说明宿主预览与导出 APK 如何共用同一套可见性判定以及工具栏驱动的控制台面板与页内查找功能的底层实现帮助你在构建期精确裁剪工具栏按钮、保证预览所见即导出所得。功能定位浏览器工具栏是应用内浏览器的顶部栏带后退/前进/刷新按钮以及页面标题与 URL 显示。它在 编辑通用配置编辑器 中以独立卡片形式出现属于构建期设置你在编辑应用时勾选的结果会被写入应用配置随 APK 一起生效。主开关 browserToolbarEnabled工具栏的第一层控制是主开关浏览器工具栏字段browserToolbarEnabled其语义由源码注释明确定义见 WebViewConfig 定义默认关闭页面完全不带工具栏渲染效果类似全屏打开后所有子项全开用户再从「全开底板」上逐个裁剪按钮再次关闭时所有子项一并关闭重新打开总是回到全开状态不会复活旧的逐项选择。在 WebViewConfig 中可以看到完整的字段与默认值// Browser toolbar master switch (#654 redesign): off (default) renders no toolbar // at all — the page behaves fullscreen-like; on shows the toolbar with every item // flag on, and the user trims individual buttons from there. val browserToolbarEnabled: Boolean false, val toolbarShowTitle: Boolean true, val toolbarShowUrl: Boolean true, val toolbarShowBack: Boolean true, val toolbarShowForward: Boolean true, val toolbarShowRefresh: Boolean true, val toolbarShowConsole: Boolean true, val toolbarShowFind: Boolean true, val hideToolbar: Boolean false,注意一个容易混淆的细节七个子项的默认值都是true但主开关默认false。由于渲染时要求「主开关 AND 子项」同时为真见后文所以默认状态下工具栏依然不渲染——子项的true只是保证「打开主开关的瞬间就是全开状态」无需额外迁移或初始化。主开关的联动逻辑由 withBrowserToolbarEnabled 扩展函数实现/** * Applies the browser toolbar master toggle to a [WebViewConfig] (#654 redesign). * * Turning the toolbar on flips every item flag on — the user then trims individual * buttons from the all-on slate. Turning it off flips them all off: off means no * toolbar at all, so a re-enable must not resurrect stale per-item choices. */ fun WebViewConfig.withBrowserToolbarEnabled(enabled: Boolean): WebViewConfig copy( browserToolbarEnabled enabled, toolbarShowTitle enabled, toolbarShowUrl enabled, // …七个子项全部置为 enabled )这一行为有专门的回归测试保障BrowserToolbarToggleTest 验证了「打开主开关后七个子项全部为真」「关闭主开关后七个子项全部为假」两条不变式。工具栏项七个独立子开关工具栏启用时每个按钮有独立开关对应七个配置字段界面选项配置字段默认值作用显示标题toolbarShowTitletrue工具栏中显示页面标题显示 URLtoolbarShowUrltrue工具栏中显示当前地址显示后退toolbarShowBacktrue后退按钮显示前进toolbarShowForwardtrue前进按钮显示刷新toolbarShowRefreshtrue刷新按钮显示控制台按钮toolbarShowConsoletrue打开控制台面板的按钮显示页内查找按钮toolbarShowFindtrue打开页内查找栏的按钮只保留部分子项的工具栏仍会渲染例如只剩控制台按钮。这一条不是文档的口头承诺而是有回归测试锁定的行为ToolbarVisibilityTest 中的toolbar trimmed down to console only still has content用例明确指出历史版本中预览与导出壳的渲染门槛只统计部分子项导致裁剪到单个按钮的工具栏会整条消失现在该行为已被测试固化。可见性判定预览与导出共用同一套规则「宿主预览裁剪的结果就是导出的结果」这一承诺在源码层面通过一个共享的纯函数实现——ToolbarVisibility.kt 提供两个函数// 工具栏是否有至少一个要渲染的项 fun hasAnyToolbarItem( toolbarShowTitle: Boolean, toolbarShowUrl: Boolean, toolbarShowBack: Boolean, toolbarShowForward: Boolean, toolbarShowRefresh: Boolean, toolbarShowConsole: Boolean, toolbarShowFind: Boolean ): Boolean toolbarShowTitle || toolbarShowUrl || toolbarShowBack || toolbarShowForward || toolbarShowRefresh || toolbarShowConsole || toolbarShowFind // 每个按钮可见 主开关 AND 自己的子项开关 fun resolveToolbarButtons( toolbarEnabled: Boolean, // …七个子项 ): ToolbarButtonVisibility ToolbarButtonVisibility( showTitle toolbarEnabled toolbarShowTitle, showUrl toolbarEnabled toolbarShowUrl, // …其余各项同理 )两个函数都刻意不给toolbarShowConsole/toolbarShowFind参数设置默认值源码注释称之为 anti-drift rule所有调用方必须显式传参避免某条渲染路径把新增标志位静默当作「开」而另一条路径当作「关」。在宿主预览端ShellScaffoldLayout 的判定为val toolbarEnabled toolbarCfg.browserToolbarEnabled val hasAnyItem hasAnyToolbarItem(/* 七个子项 */) val showToolbar toolbarEnabled hasAnyItem (!hideToolbar || config.webViewConfig.showToolbarInFullscreen)在导出 APK 运行时WebViewActivity 使用同名的hasAnyToolbarItem/resolveToolbarButtons组合出shouldShowTopBar showToolbarInPreview toolbarEnabled hasAnyToolbarItem。两条路径调用的是同一个共享函数因此结构上就不可能漂移。这里还可见两个与工具栏联动的进阶开关默认均为false属高级设置范畴hideToolbar完全隐藏工具栏与showToolbarInFullscreen全屏模式下仍保留工具栏。运行时工具栏面板以下两个面板从运行时工具栏按钮打开在生成的 APK 或宿主预览内其按钮受上方构建期子项控制——隐藏对应项按钮即消失控制台toolbarShowConsole控制工具栏按钮打开控制台面板显示console.log/ 错误输出便于在运行时调试已加载的页面。预览端还会统计错误级日志数量consoleMessages.count { it.level ConsoleLevel.ERROR }见 ShellScaffoldLayout供面板角标展示。页内查找toolbarShowFind控制工具栏按钮打开原生底部搜索栏实时匹配计数、支持上/下跳转由 WebView 引擎的findAllAsync驱动搜索栏打开时键盘自动弹起。从 ShellScaffoldLayout 的注释 可以看到页内查找在两种浏览器内核上都可用系统内核走 WebView 的findAllAsyncGecko 内核走 GeckoView 的SessionFinder通过BrowserSurface.findInPage抽象。页面缩放不再是工具栏动作——它已成为高级设置中的构建期设置对应WebViewConfig.zoomEnabled等字段编辑工具栏时找不到缩放选项属预期行为。与其他设置的配合隐藏系统状态栏/导航栏见 全屏模式 文档。工具栏与系统栏是两层独立的顶部/底部占用全屏设置管系统栏browserToolbarEnabled管应用内工具栏。浮动返回按钮可在特殊设置中启用——当工具栏及其返回按钮被隐藏时尤其有用能保证后退能力不因裁剪工具栏而丢失。小结浏览器工具栏的配置模型可以归纳为三条规则browserToolbarEnabled默认false决定工具栏是否渲染开启即全开、关闭即全关逐项状态随主开关整体翻转EditState.kt每个按钮最终可见性 主开关 AND 自己的toolbarShow*开关ToolbarVisibility.kt只要还有一个子项为真工具栏就渲染哪怕只剩控制台按钮且宿主预览与导出 APK 调用同一判定函数保证预览即导出。相关测试可作行为核对的权威依据ToolbarVisibilityTest 覆盖「子项镜像 / 主开关否决 / 仅剩控制台仍渲染 / 全关则空」四种情况BrowserToolbarToggleTest 覆盖主开关的批量翻转语义。【免费下载链接】web-to-appThe most full featured web-to-app toolkit on Android, a complete APK workshop that runs entirely on your phone项目地址: https://gitcode.com/GitHub_Trending/web/web-to-app创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →