1 分•作者: mrandycome•7 个月前
返回首页
最新
1 分•作者: flfljh•7 个月前
# 在 HarmonyOS Next 中开发一个简单的通用标题导航栏
<p>在日常的页面开发中,大多数页面都需要一个标题栏来显示导航控件和页面信息。为每个页面重复编写这些代码效率低下,并且会导致实现不一致。本指南演示了如何创建一个可重用的标题组件。</p>
<p>## 步骤 1:创建 NavBar 组件</p>
<p>创建一个新的 ArkTS 文件,使用 `@Component` 装饰的自定义组件:</p>
```
import Utils from "../../../common/utils/Utils";
@Component
export struct NavBar {
// 组件实现将在此处
}
```
<p>## 步骤 2:实现组件属性和 UI</p>
<p>添加属性并构建标题 UI:</p>
```
import Utils from "../../../common/utils/Utils";
@Component
export struct NavBar {
@Prop title: string = ''; // 标题文本
@Prop backImg: string = ''; // 自定义返回按钮图标路径
@Prop bgColor: string = '#FFFFFF';// 标题背景颜色
@Prop customBack?: () => void; // 自定义返回按钮处理程序
@Prop mode: string = 'center'; // 标题对齐方式:'center' 或 'left'
build() {
Row() {
// 返回按钮部分
Row() {
Image(this.backImg || Utils.getImgPath('home/adult_page_back_black.png'))
.width(Utils.getVp(48))
.height(Utils.getVp(48))
.objectFit(ImageFit.Cover)
}
.onClick(() => {
// 如果提供了自定义处理程序,则使用自定义处理程序,否则使用默认的返回导航
this.customBack ? this.customBack() : router.back();
})
// 标题部分
Row() {
Text(this.title)
.fontColor('#191B27')
.fontSize(Utils.getVp(33))
.fontWeight(FontWeight.Bold)
.textAlign(this.mode === 'center' ? TextAlign.Center : TextAlign.Start)
.width('100%')
}
.margin({ left: this.mode === 'center' ? 0 : Utils.getVp(20) })
.flexShrink(1) // 允许收缩以适应内容
.height('100%')
}
.width('100%')
.padding({ left: Utils.getVp(32), right: Utils.getVp(32) })
.height(Utils.getVp(88))
.backgroundColor(this.bgColor)
}
}
```
<p>## 步骤 3:在父视图中使用组件</p>
<p>### 居中对齐标题示例:</p>
```
import { NavBar } from './component/NavBar';
@Entry
@Component
struct ParentPage {
build() {
Column() {
NavBar({ title: '页面标题', mode: 'center' })
// 页面内容在这里
}
.width('100%')
.height('100%')
}
}
```
<p>### 左对齐标题示例:</p>
```
import { NavBar } from './component/NavBar';
@Entry
@Component
struct ParentPage {
build() {
Column() {
NavBar({ title: '页面标题', mode: 'left' })
// 页面内容在这里
}
.width('100%')
.height('100%')
}
}
```
<p>## 自定义选项</p>
<p>1. *自定义图标*:使用图像路径传递 `backImg` 属性</p>
```
NavBar({
title: '设置',
backImg: Utils.getImgPath('icons/custom_back.png')
})
```
<p>2. *自定义背景*:更改标题颜色</p>
```
NavBar({
title: '个人资料',
bgColor: '#F5F5F5'
})
```
<p>3. *自定义返回操作*:覆盖默认导航</p>
```
NavBar({
title: '结账',
customBack: () => { /* 自定义逻辑 */ }
})
```
<p>## 主要特性</p>
- *响应式设计*:使用 `Utils.getVp()` 适应不同的屏幕尺寸
- *灵活的布局*:标题对齐选项(居中/左对齐)
- *可定制*:支持自定义图标、颜色和行为
- *一致的 UI*:确保应用程序中统一的标题外观
- *易于集成*:基于 props 的简单配置
<p>此实现提供了一个可重用的、可定制的标题组件,消除了代码重复,并确保在整个 HarmonyOS Next 应用程序中提供一致的导航体验。</p>
1 分•作者: myth_drannon•7 个月前
1 分•作者: flfljh•7 个月前
# 开发 Flutter 插件支持 HarmonyOS 的详细指南
## 0. 环境搭建
*前提条件*:配置 HarmonyOS Flutter 环境
*参考*:[HarmonyOS Flutter 环境搭建指南](https://juejin.cn/post/7317214081261207603)
*注意*:下载和编译引擎非常耗时。如有需要,可申请预构建的引擎。
------
## 1. 获取原始插件代码
```
git clone <原始插件仓库>
```
------
## 2. 生成 OHOS 目录
```
# 选项 1:直接生成(可能失败)
flutter create -t plugin --platforms ohos
# 选项 2:创建演示项目并复制
flutter create -t plugin --platforms ohos demo
cp -r demo/ohos ./
```
------
## 3. 配置本地依赖
在 `pubspec.yaml` 中添加本地依赖:
```
dependencies:
your_plugin:
path: ../path_to_plugin
```

## 4. 构建插件包
```bash
flutter build hap \
--local-engine-src-path /path/to/ohos_flutter/src \
--local-engine ohos_release_arm64
```
*成功输出*:
```markdown
√ Built build/hap/release/entry-release.hap (XX.XMB)
```
------
## 5. 验证生成的文件
构建成功后:

## 6. 找到插件 HAR 包
插件输出目录:
```markdown
your_plugin/ohos/build/outputs/
└── har
└── your_plugin_ohos.har # 插件包
```

## 7. 将 HAR 添加到演示项目
将 HAR 复制到演示项目:
bash
```bash
cp your_plugin_ohos.har demo_portal/module/ohos/libs/
```
------

## 8. 配置 HAR 依赖

## 9. 初始化插件

## 10. 测试插件功能


## 11. 开发原生实现
按照以下步骤进行原生开发:
1. 分析现有的 iOS/Android 原生逻辑
2. 在 `ohos/src/main/cpp/` 中创建 HarmonyOS 等效代码
3. 实现平台接口:cpp
1 分•作者: zX41ZdbW•7 个月前
1 分•作者: codexy•7 个月前
2 分•作者: bdev12345•7 个月前
30 分•作者: todsacerdoti•7 个月前
10 分•作者: Bogdanp•7 个月前
1 分•作者: herbertl•7 个月前
1 分•作者: 90s_dev•7 个月前
1 分•作者: gnabgib•7 个月前
1 分•作者: neehao•7 个月前
1 分•作者: ottaborra•7 个月前
我注意到,如果真要说有什么普遍适用的、贯穿所有领域、关于自律、关于动力的建议,那一定是:成长。<p>简单明了。<p>成长的过程是如此微妙,很容易被忽略,远看似乎微不足道,但长期下来却会追上你。我注意到,我从前点餐都会紧张到满头大汗,到现在可以和任何人侃侃而谈。但这并非有意识地实现的,而是在经历了无数次失败、平庸的体验,以及我从未想过会带来任何结果的交流之后才发生的。至少从我的经验来看,它绝对不是线性的。所以我很好奇,大家认为最好的成长方式是什么?
2 分•作者: aaronbrethorst•7 个月前
1 分•作者: handfuloflight•7 个月前
2 分•作者: Brysonbw•7 个月前
2 分•作者: jesprenj•7 个月前
1 分•作者: handfuloflight•7 个月前
23 分•作者: TMEHpodcast•7 个月前