OpenHarmony实战开发-如何使用Web预渲染实现功能介绍。

介绍

为了便于大家在使用本案例集时能够更详细的了解各个案例,本案例基于Web预渲染实现了案例介绍功能,即应用右下角的问号icon。

效果图预览

在这里插入图片描述
使用说明

  1. 因为直接加载的线上README,因此本功能需联网使用
  2. 点击icon,即会弹出对应案例的README
  3. 按钮可拖动
  4. 返回或下拉bindSheet上方的dragBar可隐藏帮助页

案例适配说明

为确保案例正确显示其README,请确保entry模块的依赖中@ohos/xxx中的xxx与案例目录名相同

实现思路

1.使用Stack承载Navigation,从而使得icon能够在应用的各个案例(NavDestination承载)上显示。

Stack() {Navigation(this.pageStack) {//...}// 帮助功能:在每个案例的右下角添加“帮助”功能HelperView()
}

2.使用BindSheet+WebView加载仓上各模块README。

build() {Image($r("app.media.help")).bindSheet($$this.isShowReadMe, this.buildReadMeSheet(), {//...})
}@Builder
buildReadMeSheet(): void {//...
}

3.使用webview预渲染提升用户体验,复用webview实例减少资源占用。

@Builder
function WebBuilder(data: Data) {Web({ src: data.url, controller: data.controller }).onPageBegin(() => {data.controller.onActive();})
}const wrap: WrappedBuilder<Data[]> = wrapBuilder<Data[]>(WebBuilder);export class NWebNodeController extends NodeController {private rootNode: BuilderNode<Data[]> | null = null;makeNode(uiContext: UIContext): FrameNode | null {if (this.rootNode) {return this.rootNode.getFrameNode();}return null; // 返回null控制动态组件脱离绑定节点}initWeb(url: string, uiContext: UIContext, controller: WebviewController) {if (this.rootNode) {return;}this.rootNode = new BuilderNode(uiContext);this.rootNode.build(wrap, { url: url, controller: controller });}
}interface CurrentNode {url: string | null;webController: webview.WebviewController | null;nWebController: NWebNodeController | null;
}/*** 复用webview*/
function loadUrl(url: string): void {if (currentNode.webController) {currentNode.url = url;currentNode.webController.loadUrl(url);}
}const currentNode: CurrentNode = { url: null, nWebController: null, webController: null };/*** 创建web实例,如果已经存在web实例,复用* @param url* @param uiContext*/
export function createNWeb(url: string, uiContext: UIContext): void {if (currentNode.webController && currentNode.nWebController && currentNode.url !== url) {loadUrl(url);return;}clearHelperWeb();let baseNode = new NWebNodeController();let controller = new webview.WebviewController();// 初始化自定义web组件baseNode.initWeb(url, uiContext, controller);currentNode.url = url;currentNode.webController = controller;currentNode.nWebController = baseNode;
}/*** 获取NodeController*/
export function getNWeb(url: string, uiContext: UIContext): NWebNodeController | null {if (currentNode.url != url) {loadUrl(url);}return currentNode.nWebController;
}/*** 停止页面加载:当url频繁切换时使用*/
export function stopWebLoad(): void {if (currentNode.url && currentNode.webController) {currentNode.webController.stop();}
}

4.监听NavPathStack的变更,及时切换url

onPageStackChange(): void {if (!this.pageStack.size()) {this.helperUrl = HelperConstants.HELPER_URL_HOME;} else {const size: number = this.pageStack.size();let moduleName: string = this.pageStack.getAllPathName()[size-1].split('/')[1];this.helperUrl = HelperConstants.HELPER_URL_PROTOTYPE.replace("{placeholder}", moduleName);}
}

为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→HarmonyOS教学视频:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等…视频教程

在这里插入图片描述
在这里插入图片描述

鸿蒙生态应用开发白皮书V2.0PDF: 获取完整版白皮书方式请点击→https://docs.qq.com/doc/DZVVkRGRUd3pHSnFG?u=a42c4946d1514235863bb82a7b2ac128

在这里插入图片描述

鸿蒙 (Harmony OS)开发学习手册→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

一、入门必看

1.应用开发导读(ArkTS)
2………
在这里插入图片描述

二、HarmonyOS 概念→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.系统定义
2.技术架构
3.技术特性
4.系统安全
5…

在这里插入图片描述

三、如何快速入门?→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.基本概念
2.构建第一个ArkTS应用
3…

在这里插入图片描述

四、开发基础知识→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
在这里插入图片描述

五、基于ArkTS 开发→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
在这里插入图片描述

更多了解更多鸿蒙开发的相关知识可以参考:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/817445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫的目的是做什么

通过网站域名获取HTML数据解析数据&#xff0c;获取想要的信息存储爬取的信息如果有必要&#xff0c;移动到另一个网页重复过程 这本书上的代码的网址是 &#xff1a; GitHub - REMitchell/python-scraping: Code samples from the book Web Scraping with Python http://shop.…

风力发电场集中监控系统解决方案

风力发电场集中监控系统解决方案 作为清洁能源之一&#xff0c;风力发电场近几年装机容量快速增长。8月17日&#xff0c;国家能源局发布1-7月份全国电力工业统计数据。截至7月底&#xff0c;全国累计发电装机容量约27.4亿千瓦&#xff0c;同比增长11.5%。其中&#xff0c;太阳能…

火绒安全的用法

火绒安全软件是一款综合性的电脑安全防护工具&#xff0c;提供了病毒查杀、系统防护、网络安全等多种功能&#xff0c;以帮助用户保护电脑免受恶意软件和网络威胁的侵害。以下是火绒安全软件的一些主要用法&#xff1a; 病毒查杀&#xff1a;火绒安全软件提供全盘查杀、快速查杀…

[STM32+HAL]DengFOC移植之闭环位置控制

一、源码来源 DengFOC官方文档 二、HAL库配置 1、开启硬件IIC低速模式 低速更稳定 2、PWM波开启 三、keil填写代码 1、AS5600读取编码器数值 #include "AS5600.h" #include "math.h"float angle_prev0; int full_rotations0; // full rotation trac…

选择电源自动化测试系统,要考虑哪些因素?

随着科技的发展以及市场需求的变化&#xff0c;手动测试以及传统自动化测试不足日益明显&#xff0c;已无法满足当前的电源测试需求&#xff0c;因此&#xff0c;选择全新的自动化测试系统成为必然趋势。那么&#xff0c;要如何选择可靠、高效的电源自动化测试系统呢&#xff1…

计算机网络——网络地址转换(NAT)技术

目录 前言 前篇 引言 SNAT&#xff08;Source Network Address Translation&#xff09;源网络地址转换 SNAT流程 确定性标记 DNAT&#xff08;Destination Network Address Translation&#xff0c;目标网络地址转换&#xff09; NAT技术重要性 前言 本博客是博主用于…

15 Python进阶: random和pyecharts

Python random 模块主要用于生成随机数。 random 模块实现了各种分布的伪随机数生成器。 要使用 random 函数必须先导入&#xff1a; import randompython random 模块的一般用法 Python中的random模块提供了生成伪随机数的功能&#xff0c;可以用于模拟、游戏开发、密码学…

【Spring Boot 源码学习】SpringApplication 的 run 方法核心流程介绍

《Spring Boot 源码学习系列》 SpringApplication 的 run 方法核心流程介绍 一、引言二、往期内容三、主要内容3.1 run 方法源码初识3.2 引导上下文 BootstrapContext3.3 系统属性【java.awt.headless】3.4 早期启动阶段3.5 准备和配置应用环境3.6 打印 Banner 信息3.7 新建应用…

Blender表面细分的操作

在使用Blender的过程中,刚开始创建的模型,都会比较少面,这样操作起来比较流畅,减少电脑的计算量,当设计快要完成时,就会增加表面细分,这样更加圆滑,看起来更加顺眼。 比如创建一个猴头,它会默认显示如下: 从上图可以看到,有一些表面会比较大,棱角很多。 这时候你…

win11如何重新安装应用商店,怎么重装应用商店

win11系统内置了应用商店&#xff0c;相当于手机的应用商城&#xff0c;用户们想要下载软件时&#xff0c;就会前往应用商店搜索下载。如果我们因为误操作&#xff0c;删除了win11应用商店&#xff0c;或者是应用商店出现闪退、卡顿等问题&#xff0c;这个时候&#xff0c;最好…

MyBatis-Spring整合

引入Spring之前需要了解mybatis-spring包中的一些重要类&#xff1b; http://www.mybatis.org/spring/zh/index.html 什么是 MyBatis-Spring&#xff1f; MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 知识基础 在开始使用 MyBatis-Spring 之前&#x…

Python学习笔记23 - 目录操作

os模块操作目录相关函数 os.path模块操作目录相关函数 案例1 —— 列出指定目录下的所有.py文件 案例2 —— walk()

内网渗透-红队内网渗透工具(Viper)

红队内网渗透工具(Viper) 最近发现一款很强大的内网渗透工具Viper 接下来我给大家介绍一下具体的安装过程&#xff0c;这里我在kali上进行安装 &#xff08;1&#xff09;首先打开kali终端&#xff0c;切换到root用户,确认以下操作都在root用户下操作&#xff0c;sudo -s 安装…

【MATLAB源码-第16期】基于matlab的MSK定是同步仿真,采用gardner算法和锁相环

1、算法描述 **锁相环&#xff08;PLL&#xff09;** 是一种控制系统&#xff0c;用于将一个参考信号的相位与一个输入信号的相位同步。它在许多领域中都有应用&#xff0c;如通信、无线电、音频、视频和计算机系统。锁相环通常由以下几个关键组件组成&#xff1a; 1. **相位…

基于springboot实现医疗病历互换系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现医疗病历交互系统演示 摘要 进入21世纪&#xff0c;计算机技术迅速向着网络化的、集成化方向发展。传统的单机版应用软件正在逐渐退出舞台&#xff0c;取而代之的是支持网络、支持多种数据信息的新一代网络版应用软件&#xff0c;形成了信息化的社会。信息…

2024最新 PyCharm 2024.1 更新亮点看这篇就够了

2024最新 PyCharm 2024.1 更新亮点看这篇就够了 文章目录 2024最新 PyCharm 2024.1 更新亮点看这篇就够了&#x1f680; PyCharm 2024.1 发布&#xff1a;全面升级&#xff0c;助力高效编程&#xff01;摘要引言 &#x1f680; 快速掌握 Hugging Face&#xff1a;模型与数据集文…

(八)C++自制植物大战僵尸游戏植物基类讲解

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/m0EtD 在植物大战僵尸游戏中&#xff0c;最重要的两个类别就是植物与僵尸。植物可以对僵尸进行攻击&#xff0c;不同的植物攻击方式千差万别&#xff0c;但是不同植物又有许多相同的属性。在基类&#xff08;父类&#xf…

【Canvas技法】绘制正三角形、切角正三角形、圆角正三角形

【图例】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>绘制正三角形、切角正三角形、圆角正三角形</title><style …

自己操作逆向案例一——某竞赛网登录密码加密,超级简单,泪目了!

网址&#xff1a;aHR0cHM6Ly9leGFtem9uZS5zYWlrci5jb20vcXVlc3Rpb24vZXhwbG9yZQ 打开开发者工具&#xff0c;点击账号密码登录&#xff0c;进行抓包 先进行搜索&#xff0c;发现一下子就找到了&#xff0c;且看上去很像MD5加密&#xff0c;打上断点&#xff0c;再次点击登录。…

linux 自定义命令/别名

参考资料 Linux(Ubuntu)自定义命令的使用Linux/Ubuntu系统自定义Shell命令Ubuntu/Linux 操作系统 自定义命令 目录 一. 为路径取别名二. 修改.profile文件2.1 .profile简介2.2 需求2.3 修改.profile文件 三. 创建软链接 一. 为路径取别名 ⏹需求&#xff1a;有一个work文件夹…