HarmonyOS 鸿蒙Next中HMNavigation title如何实现自定义
HarmonyOS 鸿蒙Next中HMNavigation title如何实现自定义
HMNavigation
怎么实习自定义标题,居中显示
直接wrapBuilder(titleBuilder)不会报错,但是不能传参...
@Builder
function titleBuilder(param: BuildRooms) {
Column() {
Text(param.name)
}
}
const wBuilder: WrappedBuilder<[BuildRooms]> = wrapBuilder(titleBuilder);
@HMRouter({pageUrl: 'RoomPage'})
@ComponentV2
export struct RoomPage {
private param: BuildRooms | null = null;
aboutToAppear(): void {
this.param = HMRouterMgr.getCurrentParam() as BuildRooms;
Logger.info(`param + ${this.param}`)
}
build() {
HMNavigation({
navigationId: RouterMap.ROOM_PAGE,
options:{
title: {
titleValue: wBuilder.builder({param: this.param})
},
modifier: new NavModifier()
}
}){
}
}
}
更多关于HarmonyOS 鸿蒙Next中HMNavigation title如何实现自定义的实战教程也可以访问 https://www.itying.com/category-93-b0.html
可以这样去解决:
import { AttributeUpdater, LengthMetrics } from '@kit.ArkUI';
import { HMDefaultGlobalAnimator, HMNavigation, HMRouterMgr } from '@hadss/hmrouter';
/**
* 界面样式公用函数
*/
class NavModifier extends AttributeUpdater<NavigationAttribute> {
initializeModifier(instance: NavigationAttribute): void {
instance.mode(NavigationMode.Stack);
instance.navBarWidth('100%');
instance.hideToolBar(true);
}
}
interface BuildRooms {
name: string
}
@Entry
@Component
struct Index {
modifier: NavModifier = new NavModifier();
private param: BuildRooms = {
name: "sy"
};
aboutToAppear(): void {
}
@Builder
MyBuilderFunction(params: BuildRooms) {
Text("标题在这" + params.name)
.textAlign(TextAlign.Center)
.backgroundColor(Color.Pink)
.width('100%')
}
build() {
// @Entry中需要再套一层容器组件,Column或者Stack
Column() {
// 使用HMNavigation容器
HMNavigation({
navigationId: 'mainNavigation',
options: {
// 设置动画样式
standardAnimator: HMDefaultGlobalAnimator.STANDARD_ANIMATOR,
// 设置弹框动画样式
dialogAnimator: HMDefaultGlobalAnimator.DIALOG_ANIMATOR,
// 设置页面navigation的参数,标题栏,工具栏,bar那些
modifier: this.modifier,
title: {
titleValue: {
builder: () => {
this.MyBuilderFunction(this.param)
},
},
titleOptions: {
paddingStart: new LengthMetrics(6)
}
}
},
}) {
Row() {
Text("点击跳转")
.fontSize(50)
.onClick(() => {
HMRouterMgr.push({ pageUrl: 'pageB' })
})
}
.width('100%')
.height('100%')
.backgroundColor(Color.Yellow)
.justifyContent(FlexAlign.Center)
}
}
.height('100%')
.width('100%')
}
}
更多关于HarmonyOS 鸿蒙Next中HMNavigation title如何实现自定义的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
通过@Builder构建自定义标题组件
[@Builder](/user/Builder) NavigationCenterTitle() {
Column() {
Text('居中标题')
.fontSize(22)
.fontWeight(FontWeight.Medium)
}
.width('100%')
.alignItems(HorizontalAlign.Center)
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP])
}
隐藏默认标题栏:在页面设置中移除.title()参数
添加自定义组件到Navigation顶部
Navigation() {
Column() {
this.CustomTitleComponent() // 自定义标题组件
NavDestination() {
// 页面内容
}
}
}
在HarmonyOS的ArkUI框架中,HMNavigation组件的标题自定义通过title属性实现。可使用自定义组件或Builder函数进行灵活定义。例如,在@Entry组件中设置title属性为自定义的UI描述,支持文本、图标或组合元素。具体通过Navigation组件相关接口配置,避免依赖Java或C。
在HarmonyOS Next中,HMNavigation的自定义标题可以通过titleBuilder
实现居中显示。你当前的代码方向正确,但需要调整参数传递方式。
使用wrapBuilder
时,确保参数类型匹配。在titleBuilder
中,直接使用Text
组件并设置textAlign(TextAlign.Center)
即可实现居中:
@Builder
function titleBuilder(param: BuildRooms) {
Column() {
Text(param.name)
.textAlign(TextAlign.Center) // 添加居中属性
.width('100%')
}
}
如果参数传递有问题,可以尝试在aboutToAppear
中确保this.param
已正确赋值,避免空值导致构建失败。检查BuildRooms
类型的定义,确保name
属性存在。
这种方式能够有效自定义导航栏标题并实现居中显示。