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

简介: 富文本内容编辑我们直接使用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
166
分享
相关文章
|
5天前
鸿蒙开发:V2版本装饰器@Once
@Once装饰器只能与@Param搭配使用,仅此一个组合,无其他使用方式,还有就是,必须在V2版本,也就是@ComponentV2装饰的自定义组件中,否则会报异常。
鸿蒙开发:V2版本装饰器@Once
|
2天前
|
鸿蒙开发:实现AOP代码插桩能力
正确的运用AOP,可以提升代码的模块化、复用性、可维护性和灵活性,同时降低了耦合度,使系统更易于扩展和维护。
25 13
鸿蒙开发:实现AOP代码插桩能力
|
6天前
鸿蒙开发:熟知@BuilderParam装饰器
在实际的开发中,我们经常会遇到自定义组件的情况,比如通用的列表组件,选项卡组件等等,由于使用方的样式不一,子组件是动态变化的,针对这一情况,就不得不让使用方把子组件视图传递过来,如何来接收这个UI视图,这就是@BuilderParam装饰器的作用。
鸿蒙开发:熟知@BuilderParam装饰器
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
68 5
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
4天前
|
鸿蒙开发:校验构造传参装饰器@Require
@Require装饰器依赖ArkTs的类型检查,仅在编译阶段拦截类型错误和缺失参数,对于运行时才能确定的动态值,如从网络请求获取的数据,仍需在生命周期函数中进行二次校验。
39 18
鸿蒙开发:V2版本装饰器之@Monitor装饰器
如果要实现@Monitor监听,其变量一定要被@Local、@Param、@Provider、@Consumer、@Computed装饰,未被修饰则无法被监听,还有,如果监听对象的变化,则不建议在一个类中对同一个属性进行多次@Monitor的监听,多次监听,只有最后一个定义的监听方法才会有效。
HarmonyOS NEXT开发-ArkUI六
本文介绍了颜色渐变(线性渐变和径向渐变)与阴影效果的应用,通过具体代码示例展示了如何在组件中实现这些视觉效果,帮助开发者提升界面美观度。君志所向,一往无前,欢迎一起探索! 简介字数:239
16 0
HarmonyOS NEXT开发-ArkUI六
HarmonyOS NEXT开发-ArkUI八
本文介绍了Harmony OS开发中的线性布局技巧,包括交叉轴对齐、自适应缩放及综合实践案例,帮助开发者轻松掌握相关技能。每天学习一个知识点,一起加油!
18 0
HarmonyOS NEXT开发-ArkUI八
HarmonyOS NEXT开发-ArkUI十二
网格布局(Grid)适用于由多行列组成的复杂界面,支持固定行列、合并单元格及滚动效果。其应用场景广泛,如文件管理、购物列表等。通过设置`columnsTemplate`和`rowsTemplate`可定义行列比例,使用`GridItem`组件实现内容展示。此外,还能通过自定义滚动条优化用户体验。代码示例展示了如何创建固定行列、合并单元格以及实现滚动效果的网格布局。 关注程序员Feri,了解更多实用技术与搞钱技巧,一起在编程道路上不断前行!
22 0
HarmonyOS NEXT开发-ArkUI十二
HarmonyOS NEXT开发-ArkUI十一
本文介绍Swiper组件,它用于滑动轮播显示,支持自动播放、纵向滑动、自定义导航点等特性。通过设置尺寸、内容及属性,可实现丰富的轮播效果。示例代码展示了基本用法和综合实践,帮助开发者快速上手。
28 0
HarmonyOS NEXT开发-ArkUI十一

热门文章

最新文章

  • 1
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
    16
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    13
  • 3
    EMAS 性能分析全面适配HarmonyOS NEXT,开启原生应用性能优化新纪元
    8
  • 4
    鸿蒙开发:了解@Builder装饰器
    8
  • 5
    【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    23
  • 6
    【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
    11
  • 7
    Harmony os next~HarmonyOS Ability与页面跳转开发详解
    43
  • 8
    HarmonyOS使用系统图标
    6
  • 9
    【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
    16
  • 10
    鸿蒙H5离线包技术分享
    32
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等