
? 坚果派·红目香薰 倾情分享 ? 用心打造每一个技术细节,为开发者创造更多价值 ? 让HarmonyOS开发变得更简单、更有趣

嗨,亲爱的技术朋友们!?
我是来自坚果派的红目香薰,一个热爱技术、专注HarmonyOS开发的程序媛。在这个数字化飞速发展的时代,HarmonyOS作为华为自主研发的操作系统,正在改变着我们的数字生活体验。
? 为什么要写这个系列?
每一个Demo都是我精心设计和反复测试的结果,希望能够为你的HarmonyOS开发之路点亮一盏明灯。✨
今天我们来深入学习HarmonyOS中最基础也是最重要的组件之一——文本控件(Text)。从基础使用到高级样式,让我们一起探索文本控件的无限可能!
本Demo展示了HarmonyOS中Text组件的全面使用方法,包括:
界面采用卡片式布局,每个卡片展示不同的文本效果:
TextDemo/
├── src/
│ ├── main/
│ │ ├── ets/
│ │ │ ├── pages/
│ │ │ │ └── Index.ets // 主页面
│ │ │ └── entryability/
│ │ └── resources/
│ │ ├── base/
│ │ │ ├── element/
│ │ │ └── media/
│ │ └── rawfile/
│ └── module.json5Text('Hello HarmonyOS')
.fontSize(16) // 字体大小
.fontColor(Color.Black) // 字体颜色
.fontWeight(FontWeight.Normal) // 字体粗细渐变色文本实现: 通过linearGradient属性可以为文本添加渐变色效果,创建更加吸引人的视觉效果。
文本截断处理: 使用maxLines和textOverflow属性可以优雅地处理长文本的显示问题,避免界面布局被破坏。
响应式字体大小: 结合设备信息和屏幕密度,可以实现自适应的字体大小设置。
// src/main/ets/pages/Index.ets
@Entry
@Component
struct Index {
@State message: string = 'HarmonyOS文本控件示例'
build() {
Scroll() {
Column({ space: 20 }) {
// 标题区域
this.buildTitleSection()
// 基础文本样式
this.buildBasicTextSection()
// 高级文本效果
this.buildAdvancedTextSection()
// 文本对齐和截断
this.buildAlignmentSection()
// 装饰效果
this.buildDecorationSection()
// 交互文本
this.buildInteractiveSection()
}
.width('100%')
.padding(20)
}
.backgroundColor('#F5F5F5')
.height('100%')
}
// 标题区域
@Builder
buildTitleSection() {
Column({ space: 10 }) {
Text('🌟 HarmonyOS文本控件')
.fontSize(28)
.fontWeight(FontWeight.Bold)
.fontColor(Color.White)
.textAlign(TextAlign.Center)
.width('100%')
.padding(20)
.borderRadius(15)
.linearGradient({
angle: 45,
colors: [['#FF6B6B', 0.0], ['#4ECDC4', 1.0]]
})
.shadow({
radius: 10,
color: '#40000000',
offsetX: 0,
offsetY: 5
})
Text('探索文本组件的无限可能')
.fontSize(16)
.fontColor('#666666')
.textAlign(TextAlign.Center)
.fontStyle(FontStyle.Italic)
}
.width('100%')
.backgroundColor(Color.White)
.padding(20)
.borderRadius(12)
.shadow({
radius: 8,
color: '#20000000',
offsetX: 0,
offsetY: 2
})
}
// 基础文本样式
@Builder
buildBasicTextSection() {
Column({ space: 15 }) {
Text('📝 基础文本样式')
.fontSize(20)
.fontWeight(FontWeight.Medium)
.fontColor('#333333')
.margin({ bottom: 10 })
// 不同字体大小
Text('超大标题 - 24px')
.fontSize(24)
.fontWeight(FontWeight.Bold)
.fontColor('#2C3E50')
Text('大标题 - 20px')
.fontSize(20)
.fontWeight(FontWeight.Medium)
.fontColor('#34495E')
Text('正文 - 16px')
.fontSize(16)
.fontWeight(FontWeight.Normal)
.fontColor('#5D6D7E')
Text('小字 - 14px')
.fontSize(14)
.fontWeight(FontWeight.Lighter)
.fontColor('#85929E')
Text('极小字 - 12px')
.fontSize(12)
.fontColor('#BDC3C7')
}
.width('100%')
.backgroundColor(Color.White)
.padding(20)
.borderRadius(12)
.alignItems(HorizontalAlign.Start)
.shadow({
radius: 8,
color: '#20000000',
offsetX: 0,
offsetY: 2
})
}
// 高级文本效果
@Builder
buildAdvancedTextSection() {
Column({ space: 15 }) {
Text('🎨 高级文本效果')
.fontSize(20)
.fontWeight(FontWeight.Medium)
.fontColor('#333333')
.margin({ bottom: 10 })
// 渐变色文本
Text('渐变色文本效果')
.fontSize(18)
.fontWeight(FontWeight.Bold)
.linearGradient({
angle: 90,
colors: [['#FF9A9E', 0.0], ['#FECFEF', 0.5], ['#FECFEF', 1.0]]
})
// 阴影文本
Text('带阴影的文本')
.fontSize(18)
.fontWeight(FontWeight.Medium)
.fontColor('#E74C3C')
.textShadow({
radius: 5,
color: '#40E74C3C',
offsetX: 2,
offsetY: 2
})
// 描边文本效果(通过多层Text模拟)
Stack() {
Text('描边文本效果')
.fontSize(18)
.fontWeight(FontWeight.Bold)
.fontColor('#3498DB')
.textShadow({
radius: 1,
color: '#FFFFFF',
offsetX: 1,
offsetY: 1
})
}
}
.width('100%')
.backgroundColor(Color.White)
.padding(20)
.borderRadius(12)
.alignItems(HorizontalAlign.Start)
.shadow({
radius: 8,
color: '#20000000',
offsetX: 0,
offsetY: 2
})
}
// 文本对齐和截断
@Builder
buildAlignmentSection() {
Column({ space: 15 }) {
Text('📐 文本对齐与截断')
.fontSize(20)
.fontWeight(FontWeight.Medium)
.fontColor('#333333')
.margin({ bottom: 10 })
// 左对齐
Text('左对齐文本 - 这是一段比较长的文本内容,用来演示文本的对齐效果')
.fontSize(14)
.fontColor('#2C3E50')
.textAlign(TextAlign.Start)
.width('100%')
.backgroundColor('#ECF0F1')
.padding(10)
.borderRadius(8)
// 居中对齐
Text('居中对齐文本')
.fontSize(14)
.fontColor('#8E44AD')
.textAlign(TextAlign.Center)
.width('100%')
.backgroundColor('#F4ECF7')
.padding(10)
.borderRadius(8)
// 右对齐
Text('右对齐文本')
.fontSize(14)
.fontColor('#E67E22')
.textAlign(TextAlign.End)
.width('100%')
.backgroundColor('#FDF2E9')
.padding(10)
.borderRadius(8)
// 文本截断
Text('这是一段很长很长的文本内容,用来演示文本截断效果,当文本超过指定行数时会显示省略号...')
.fontSize(14)
.fontColor('#27AE60')
.maxLines(2)
.textOverflow({ overflow: TextOverflow.Ellipsis })
.width('100%')
.backgroundColor('#E8F8F5')
.padding(10)
.borderRadius(8)
}
.width('100%')
.backgroundColor(Color.White)
.padding(20)
.borderRadius(12)
.alignItems(HorizontalAlign.Start)
.shadow({
radius: 8,
color: '#20000000',
offsetX: 0,
offsetY: 2
})
}
// 装饰效果
@Builder
buildDecorationSection() {
Column({ space: 15 }) {
Text('🎭 文本装饰效果')
.fontSize(20)
.fontWeight(FontWeight.Medium)
.fontColor('#333333')
.margin({ bottom: 10 })
// 下划线
Text('带下划线的文本')
.fontSize(16)
.fontColor('#3498DB')
.decoration({
type: TextDecorationType.Underline,
color: '#3498DB'
})
// 删除线
Text('带删除线的文本')
.fontSize(16)
.fontColor('#E74C3C')
.decoration({
type: TextDecorationType.LineThrough,
color: '#E74C3C'
})
// 上划线
Text('带上划线的文本')
.fontSize(16)
.fontColor('#9B59B6')
.decoration({
type: TextDecorationType.Overline,
color: '#9B59B6'
})
// 斜体文本
Text('斜体文本效果')
.fontSize(16)
.fontColor('#F39C12')
.fontStyle(FontStyle.Italic)
}
.width('100%')
.backgroundColor(Color.White)
.padding(20)
.borderRadius(12)
.alignItems(HorizontalAlign.Start)
.shadow({
radius: 8,
color: '#20000000',
offsetX: 0,
offsetY: 2
})
}
// 交互文本
@Builder
buildInteractiveSection() {
Column({ space: 15 }) {
Text('💬 交互式文本')
.fontSize(20)
.fontWeight(FontWeight.Medium)
.fontColor('#333333')
.margin({ bottom: 10 })
// 可点击文本
Text('点击我试试看!')
.fontSize(16)
.fontColor('#3498DB')
.decoration({
type: TextDecorationType.Underline,
color: '#3498DB'
})
.onClick(() => {
console.log('文本被点击了!')
// 这里可以添加点击事件处理逻辑
})
// 状态变化文本
Text(this.message)
.fontSize(16)
.fontColor('#27AE60')
.fontWeight(FontWeight.Medium)
.onClick(() => {
this.message = this.message === 'HarmonyOS文本控件示例' ?
'文本内容已更新!' : 'HarmonyOS文本控件示例'
})
Text('💡 提示:点击上方文本可以切换内容')
.fontSize(12)
.fontColor('#95A5A6')
.fontStyle(FontStyle.Italic)
}
.width('100%')
.backgroundColor(Color.White)
.padding(20)
.borderRadius(12)
.alignItems(HorizontalAlign.Start)
.shadow({
radius: 8,
color: '#20000000',
offsetX: 0,
offsetY: 2
})
}
}// module.json5 配置
{
"module": {
"name": "entry",
"type": "entry",
"description": "$string:module_desc",
"mainElement": "EntryAbility",
"deviceTypes": [
"phone",
"tablet"
],
"deliveryWithInstall": true,
"installationFree": false,
"pages": "$profile:main_pages",
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ts",
"description": "$string:EntryAbility_desc",
"icon": "$media:icon",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background"
}
]
}
}运行后的界面将展示:
通过这个Demo,我们学习了:
Text组件作为HarmonyOS应用开发中最基础的组件之一,掌握其各种用法对于创建优秀的用户界面至关重要。希望这个示例能够帮助到正在学习HarmonyOS开发的你!
下一期我们将探索更多有趣的组件,敬请期待!如果你有任何问题或建议,欢迎在评论区留言交流。
? 如果这篇文章对你有帮助,请点赞支持!?
让我们一起在HarmonyOS的世界里创造更多可能!
© 2024 坚果派·红目香薰 | 用心分享,用技术创造价值