鸿蒙元服务项目实战:备忘录内容编辑开发

简介: 富文本内容编辑我们直接使用RichEditor组件即可,最重要的就是参数,value: RichEditorOptions,通过它,我们可以用来设置样式,和获取最后的富文本内容,这一点是很重要的。

前言


上篇文章,我们把主要的UI已经完成了,本篇文章,我们把主要的功能编辑页面完成,所谓备忘录,就是记录内容,当然了内容不限于文字,图片,样式等等,第一个版本只实现文字即可,后续再不断地扩展。


实现编辑页面开发,有三个重点,第一个进行富文本内容编写,第二个,进行内容的样式修改,第三个就是,进行内容存储。



富文本内容编写


富文本内容编辑我们直接使用RichEditor组件即可,最重要的就是参数,value: RichEditorOptions,通过它,我们可以用来设置样式,和获取最后的富文本内容,这一点是很重要的。


定义初始化参数


controller: RichEditorController = new RichEditorController();
options: RichEditorOptions = { controller: this.controller };


设置初始化参数


RichEditor(this.options)
          .onReady(() => {
            //获取当前的时间
            this.nowTime = this.getDateTime()
            this.nowInterval = setInterval(() => {
              this.nowTime = this.getDateTime()
            }, 1000)
          })
          .placeholder("随心记,记录点点滴滴……", {
            fontColor: "#666666"
          })
          .caretColor(Color.Red)
          .padding(10)
          .margin({ top: 10 })
          .onSelect((value: RichEditorSelection) => {
            this.start = value.selection[0];
            this.end = value.selection[1];
          })
      }
      .alignRules({
        top: { anchor: "bar", align: VerticalAlign.Bottom },
        bottom: { anchor: "bottom_bar", align: VerticalAlign.Top }
      }).margin({ bottom: 80 })


内容样式修改


所有的内容样式修改,都是使用的初始化参数中富文本控制器来设置的,有两种情况,第一种是直接点击样式后再书写内容,还有一种是再原有的内容上,长按选择文本后进行设置样式。

比如我先点击加粗样式,后输入文本,那么输入的文本都是加粗的,只有取消加粗后才会恢复正常。



第二种就是在原有的文本中,长按选择文本后进行样式调整,如下的加粗样式,这一种需要注意,因为需要设置指定的文字样式,需要获取当前长按的文字的起始位置,也就是上述代码中的onSelect方法。



当然了不仅仅是加粗,任何的样式基本都是这两种情况,除此之外,还有一点非常重要,那就是修改样式之前,要保留之前的样式,比如之前是文字变大,加粗,还有更改颜色的,那么你修改当前样式,仅仅是当前样式,不能覆盖或者丢弃之前的样式。


如下所示,给选中的内容更改字体大小和颜色,那么原来的加粗仍然是保留的。



文字加粗


private setBold() {
    if (this.start != -1 && this.end != -1) {
      this.controller.updateSpanStyle({
        start: this.start,
        end: this.end,
        textStyle: {
          fontWeight: FontWeight.Bolder
        }
      })
    }
  }


文字大小


private setFontSize() {
    if (this.start != -1 && this.end != -1) {
      this.controller.updateSpanStyle({
        start: this.start,
        end: this.end,
        textStyle: {
          fontSize: this.clickStyleSizeValue
        }
      })
    }
  }


文字倾斜


private setStyle() {
    if (this.start != -1 && this.end != -1) {
      this.controller.updateSpanStyle({
        start: this.start,
        end: this.end,
        textStyle: {
          fontStyle: FontStyle.Italic
        }
      })
    }
  }


文字颜色


private setFontColor() {
    if (this.start != -1 && this.end != -1) {
      this.controller.updateSpanStyle({
        start: this.start,
        end: this.end,
        textStyle: {
          fontColor: this.clickStyleColorValue
        }
      })
    }
  }


改变指定样式之前,我们需要设置之前设置过的样式,使其各个样式可以保持一致。


private changeStyle() {
    this.controller.setTypingStyle({
      fontWeight: this.isClickStyleB ? FontWeight.Bold : FontWeight.Normal,
      fontStyle: this.isClickStyleI ? FontStyle.Italic : FontStyle.Normal,
      fontColor: this.clickStyleColorValue,
      fontSize: this.clickStyleSizeValue
    })
  }


内容存储


编辑好了内容之后,我们需要做的就是,存储内容,毕竟我们这是一个单机应用,不牵扯到网络,所以只能选择本地存储方式了。


存储数据有很多方式,比如数据库,文件,内存存储等等,在元服务开发中,并不是说想用哪个就用哪个,而是支持哪个就用哪个,目前查看官网,发现ohos.data.preferences (用户首选项)是支持的,我们可以使用它来简单实现我们的数据存储,当然了,数据库官网上没看到支持元服务,目前没有做验证,如果日后支持,尽量用数据库。


使用用户首选项,需要注意,key的动态设置,可以以当前时间戳作为key,而同样对应的value值则是一个json字符串,这个字符串包含标题,时间,内容,背景颜色等等属性。

用户首选项目前封装了工具类,大家可以去源码中查看即可。

let title = this.title //标题
            let rootBgColorValue = this.clickSkinColorValue //背景颜色
            let id = this.tempContentItemId != undefined ? this.tempContentItemId : new Date().getTime() //id
            let span = JSON.stringify(this.controller.getSpans())
            let bean = new ListContentBean()
            if (title != undefined && title != "" && span != undefined && span != "") {
              bean.title = title
              bean.time = this.getDateTime()
              bean.timeValue = new Date().getTime()
              bean.id = id
              bean.bgColor = rootBgColorValue
              bean.content = span
              let spans = this.controller.getSpans() as Array<RichEditorTextSpanResult>
              let desc = ""
              spans.forEach((span) => {
                if (desc.length < 30) {
                  desc = desc + span.value.trim()
                }
              })
              bean.desc = desc
              let json = JSON.stringify(bean)
              DataPreferences.getInstance().putSync("abner" + id, json)
            }


相关总结


关于时间应该实时变化的,不可能我进编辑页面是10点10分,编辑了30分钟,还是10点10分,显然是不合理的,所以这里的时间一定是实时的,这个一定要注意。


编辑页面还有一些其他的注意事项,比如换肤功能,底部的样式设置等等,都是比较的简单,就不做赘述了。

目录
打赏
0
5
5
0
187
分享
相关文章
HarmonyOS Next 简单上手元服务开发
本文介绍了 HarmonyOS Next 中元服务的开发流程与关键特性。元服务是一种轻量级应用程序形态,支持免安装、秒开直达,适用于听音乐、打车等场景,大幅提升服务获取效率。文章详细讲解了元服务的开发旅程,包括在 AGC 平台上新建项目、修改名称与图标、新增卡片等内容,并提供了代码示例,如 AtomicServiceTabs 的 tab 切换和标题设置、AtomicServiceNavigation 的路由管理等。此外,还探讨了 AtomicServiceWeb 的使用方法,涵盖鸿蒙页面与 h5 页面的数据传递及方法调用。
52 19
HarmonyOS Next 简单上手元服务开发
鸿蒙元服务实战-笑笑五子棋(5)
本文介绍了鸿蒙元服务实战项目“笑笑五子棋”的最后一部分,主要包括卡片制作与发布上架流程。通过 Form Kit 框架,实现静态与动态卡片的开发,详细讲解了卡片生命周期、功能页面设计及配置文件设置。文章还展示了如何完成卡片内的五子棋逻辑,包括绘制棋盘、处理落子和胜负判断等核心功能。最后,说明了发布上架的步骤,如设置图标、配置证书及打包 Hap 文件。附有参考链接和代码仓库,方便读者深入学习。至此,“笑笑五子棋”从开发到上线全流程完毕。
38 12
鸿蒙元服务实战-笑笑五子棋(5)
鸿蒙开发:Canvas绘制之画笔对象Pen
Pen对象主要适用于修改图形形状的轮廓信息,可以修改的有,颜色,线宽,是否抗锯齿,透明度,线帽样式等等属性,当然了如果你想实现一个填充效果,需要切换Brush对象。
鸿蒙开发:Canvas绘制之画笔对象Pen
鸿蒙元服务实战-笑笑五子棋(1)
《笑笑五子棋》是基于鸿蒙系统开发的元服务应用,由深度开发者分享开源。名字源于开发者女儿“笑笑”,充满程序员的独特浪漫。应用采用 ArkTS API 12、Canvas 等技术,支持 AtomicServiceTabs 和卡片开发,已成功上架并获得基础激励。凭借活跃设备数达标,还登上鸿蒙负一屏休闲分类菜单,提升了用户活跃度。本文介绍了应用背景和技术细节,下篇将聚焦代码实现。适合对鸿蒙开发感兴趣的开发者学习交流。
37 10
鸿蒙元服务实战-笑笑五子棋(1)
|
2天前
|
鸿蒙开发:信息标记组件
使用信息标记组件Badge,不需要我们在关注位置问题,我们通过position属性进行控制即可,而且针对信息的显示和隐藏,也不用过多的条件判断,可以说是非常的简单。
鸿蒙开发:信息标记组件
|
1天前
|
鸿蒙元服务实战-笑笑五子棋(4)
本文介绍了基于鸿蒙元服务开发的“笑笑五子棋”项目第四部分的核心实现。主要涵盖五子棋的基本逻辑,包括沉浸式设计、AtomicServiceTabs组件使用、棋盘绘制、点击下棋逻辑以及输赢判断等功能。
30 8
鸿蒙元服务实战-笑笑五子棋(4)
鸿蒙元服务实战-笑笑五子棋(3)
本文是鸿蒙元服务实战系列的第三篇,围绕“笑笑五子棋”项目深入讲解了 Canvas 的高级用法。主要内容包括:`createPattern` 方法实现图片填充模板,支持多种重复方式如 `repeat`、`clamp` 和 `mirror`;绘制二次和三次贝塞尔曲线的路径方法 `quadraticCurveTo` 和 `bezierCurveTo`;以及通过 `ImageData` 对象操作像素数据,实现图像反色、黑白、亮度调整等特效。此外,还介绍了性能优化的马赛克效果实现技巧和渐变滤镜效果。结合代码示例与实际效果,帮助开发者掌握 Canvas 更多实用功能。
31 8
鸿蒙元服务实战-笑笑五子棋(3)
鸿蒙元服务实战-笑笑五子棋(2)
本章节主要讲解鸿蒙元服务的创建及Canvas图形绘制实战,以“笑笑五子棋”为例。内容涵盖在AGC平台和DevEco Studio中创建元服务工程的具体步骤,以及Canvas的基本使用方法,包括设置抗锯齿、创建画布上下文、渲染组件和描绘图案。此外,还详细介绍了Canvas常见用法,如直线、矩形、弧形、文本和图像的绘制,并展示了动态效果的实现方式。最后总结了Canvas的核心属性与方法。适合对鸿蒙开发感兴趣的开发者学习参考。
35 7
鸿蒙元服务实战-笑笑五子棋(2)
鸿蒙开发:了解Canvas绘制
本文主要简单的概述了Canvas绘制的基础知识,大家作为一个简单的了解即可,下面的几篇文章,我们会对相关的绘制再做进一步的分析,首先可以先做一个简单的总结:DrawingRenderingContext在使用上远远没有CanvasRenderingContext2D使用起来方便,比如在修改画笔的粗细,颜色等属性上,就可以体现出来。
鸿蒙开发:了解Canvas绘制
鸿蒙开发:Canvas绘制之画笔对象Brush
Brush对象主要适用于绘制图形的填充信息,可以修改的有,颜色,是否抗锯齿,透明度等属性,相对比Pen对象,少了几个属性,不过基本上也满足了日常的需求。
53 10
鸿蒙开发:Canvas绘制之画笔对象Brush