前阵子在和朋友讨论,记账类的app已经那么普遍了,如果想要做点不一样的还能加什么功能。从我自己的角度出发,我觉得完全可以加一个导出Excel嘛。但是目前原生鸿蒙并没有导出Excel的方法,常规的做法是通过服务器端生成Excel文件后,再下载到本地……服务器端的方案肯定是不成的,因为大家都知道,记账属于独立开发三件套止一,独立开发意味着……哪里来的钱租服务器啊。
2025年06月18日
前阵子在和朋友讨论,记账类的app已经那么普遍了,如果想要做点不一样的还能加什么功能。从我自己的角度出发,我觉得完全可以加一个导出Excel嘛。但是目前原生鸿蒙并没有导出Excel的方法,常规的做法是通过服务器端生成Excel文件后,再下载到本地……服务器端的方案肯定是不成的,因为大家都知道,记账属于独立开发三件套止一,独立开发意味着……哪里来的钱租服务器啊。
2025年06月18日
在HarmonyOS的ArkTS语法中,自适应布局是一种能够根据外部容器大小、位置等变化,自动调整元素以适应外部环境变化的布局方式。虽然直接关于“折行布局”的具体案例在提供的参考中未明确涉及,但我们可以结合自适应布局的原理和常见场景,来构思一个折行布局的实现思路。
2025年06月18日
IT之家 5 月 4 日消息,开源鸿蒙 OpenHarmony 是由开放原子开源基金会孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。
OpenHarmony 5.1.0 Release 正式版已于 4 月 30 日发布并上线 Gitee 平台,升级 API 18。
相比前一个 Release 版本(OpenHarmony 5.0.3,即 API 15),OpenHarmony 5.1.0 Release 重点做出了如下特性新增或增强:
2025年06月18日
大家好,我是 V 哥。 在鸿蒙 NEXT 开发中,DevEco Profiler 是一款集成在 DevEco Studio 中的性能分析工具,能帮助开发者深入了解应用在运行时的性能表现,定位性能瓶颈。下面,V 哥用一个具体的业务场景来介绍DevEco Profiler的使用。
2025年06月18日
Hello,大家好,我是 V 哥。在HarmonyOS NEXT开发中,@ObservedV2装饰器和@Trace装饰器是用于状态管理的两个装饰器,它们在HarmonyOS应用开发中用于增强对类对象中属性的观测能力。如果你学过观察者模式的原理,你会更容易理解和上手,以下是它们的一些关键特性和使用注意事项:
2025年06月18日
保存图片功能几乎是每个应用程序必备的功能之一,当用户遇到喜欢的图片时可以保存到手机相册。那么在鸿蒙中保存图片是否也需要申请用户存储权限以及如何将图片保存到相册,本文将详细讲述怎么保存网络图片,指定布局生成图片保存至相册的功能实现。
2025年06月18日
大家好,我是 V 哥,在鸿蒙HarmonyOS NEXT开发中,跨线程对象传递可以通过拷贝形式实现,确保两个线程的对象内容一致,但各自指向线程的隔离内存区间。以下是使用SharedArrayBuffer实现跨线程共享内存的完整案例代码,包括详细解释,整理的学习笔记,分享给大家。关注威哥不迷路,学习鸿蒙就很酷。
2025年06月18日
在Windows应用程序开发中,WinForm和WPF是两种主要的技术框架。它们各自有不同的设计理念、渲染机制和开发模式。本文将详细探讨WPF与WinForm的本质区别,并通过示例进行说明。
WinForm基于Windows GDI/GDI+进行渲染,这是一种基于CPU的渲染技术。每个控件都是Windows原生控件的封装,适合简单的用户界面。
2025年06月18日
@Entry
@Component
struct TextDemo {
build() {
Column({space: 16}) {
Text('我是文本Text组件')
// 引用Resource资源。
// 资源引用类型可以通过$r创建Resource类型对象
// 文件位置为/resources/base/element/string.json。
Text($r('app.string.my_text'))
// 设置基线偏移量。
.baselineOffset(5)
// 设置字体
.fontSize(20)
.fontStyle(FontStyle.Italic)
.fontWeight(FontWeight.Medium)
// 边框设置
.border({ width: 1 })
.borderColor(Color.Red)
.borderRadius(20)
// 边距设置
.padding(5)
// 宽度设置
.width(200)
// Span只能作为Text和RichEditor组件的子组件显示文本内容。
// 可以在一个Text内添加多个Span来显示一段信息,例如产品说明书、承诺书等。
//
// 创建Span。
// Span组件需要写到Text组件内,单独写Span组件不会显示信息
// Text与Span同时配置文本内容时,Span内容覆盖Text内容。
Text('显示text') {
Span('显示 Span')
}
.padding(8)
.fontColor(Color.White)
.fontSize(20)
.backgroundColor(Color.Red)
.borderRadius(10)
// 设置文本装饰线及颜色。
// 通过decoration设置文本装饰线及颜色。
Text() {
Span('我是一名保安,')
.fontSize(16)
.fontColor(Color.Grey)
.decoration({ type: TextDecorationType.LineThrough, color: Color.Orange })
Span('保卫一方平安')
.fontColor(Color.Red)
.fontSize(16)
.fontStyle(FontStyle.Italic)
.decoration({ type: TextDecorationType.Underline, color: Color.Black })
Span(',最爱吃小熊饼干')
.fontSize(16)
.fontColor(Color.Blue)
.decoration({ type: TextDecorationType.Overline, color: Color.Red })
}
.maxLines(3)
.borderWidth(1)
.padding(10)
// 通过textCase设置文字一直保持大写或者小写状态。
Text() {
Span('I\'m a security guard')
.fontSize(12)
.textCase(TextCase.UpperCase)
}
.borderWidth(1)
.borderRadius(8)
.borderColor(Color.Red)
.padding(12)
// 添加事件。
// 由于Span组件无尺寸信息,事件仅支持添加点击事件onClick。
Text() {
Span('Keep one side safe')
.fontSize(12)
.textCase(TextCase.UpperCase)
.onClick(()=>{
console.info('我是一名保安,保卫一方平安')
})
}
.borderWidth(1)
.borderRadius(8)
.borderColor(Color.Red)
.padding(12)
// 自定义Text的Modifier
Text('自定义Text的Modifier')
.attributeModifier(new MyTextModifier())
// 自定义文本样式
// 通过textAlign属性设置文本对齐样式。
// 头部对齐(效果居左对齐)
Text('我是一名保安')
.textAlign(TextAlign.Start)
.attributeModifier(new MyTextModifier())
// 居中对齐
Text('保卫一方平安')
.fontSize(18)
.textAlign(TextAlign.Center)
.attributeModifier(new MyTextModifier())
// 尾部对齐(效果居右对齐)
Text('喜欢业主小丹')
.fontSize(20)
.fontColor(Color.Red)
.textAlign(TextAlign.End)
.attributeModifier(new MyTextModifier())
.padding(10)
// 通过textOverflow属性控制文本超长处理
// textOverflow需配合maxLines一起使用(默认情况下文本自动折行)。
// 自动折行
Text('我是一名保安,保卫一方平安,最爱吃小熊饼干,喜欢业主小丹。')
.attributeModifier(new MyTextModifier())
.textOverflow({ overflow: TextOverflow.None })
.maxLines(1)
.fontSize(12)
// 尾部截取...
Text('我是一名保安,保卫一方平安,最爱吃小熊饼干,喜欢业主小丹。')
.attributeModifier(new MyTextModifier())
.textOverflow({ overflow: TextOverflow.Ellipsis })
.maxLines(1)
.fontSize(12)
// 跑马灯效果
Text('我是一名保安,保卫一方平安,最爱吃小熊饼干,喜欢业主小丹。')
.attributeModifier(new MyTextModifier())
.textOverflow({ overflow: TextOverflow.MARQUEE })
.maxLines(1)
.fontSize(12)
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Start)
.alignItems(HorizontalAlign.Center)
}
}
2025年06月18日
在日常开发中,如果你有类似「左侧导航 + 右侧内容」的布局需求,比如后台管理界面、文件管理器、设置页等,SideBarContainer 是非常值得掌握的组件。它自带侧边栏和主内容区的分离机制,还支持折叠、拖拽、控制按钮和多种显示模式,是构建复杂页面结构的好帮手。