HarmonyOS鸿蒙Next中顶栏沉浸光感按钮
HarmonyOS鸿蒙Next中顶栏沉浸光感按钮 问一下大家鸿蒙阅读app的顶栏是怎么出现现在这种,滑动上去带沉浸光感效果的按钮效果呀


更多关于HarmonyOS鸿蒙Next中顶栏沉浸光感按钮的实战教程也可以访问 https://www.itying.com/category-93-b0.html
尊敬的开发者,您好
关于您反馈的问题
可以使用自定义沉浸光感的视觉效果
示例代码:
import { HdsNavigation, HdsNavigationTitleMode, HdsTabs, HdsTabsController, HdsNavigationMenuContentOptions, ScrollEffectType, hdsMaterial } from '@kit.UIDesignKit';
import { SymbolGlyphModifier } from '@kit.ArkUI';
@Entry
@Component
export struct Index {
private scrollerForScroll: Scroller = new Scroller();
private controller: HdsTabsController = new HdsTabsController();
@State customMaterialLevel: hdsMaterial.MaterialLevel = hdsMaterial.MaterialLevel.EXQUISITE;
private menus: HdsNavigationMenuContentOptions = {
value: [{
content: {
label: 'menu1',
icon: $r('sys.symbol.square_and_pencil')
}
}, {
content: {
label: 'menu2',
icon: $r('sys.symbol.star')
}
},{
content: {
label: 'menu3',
icon: $r('sys.symbol.more')
}
}
]
};
aboutToAppear(): void {
// 获取系统支持的材质类型,用于根据设备能力选择合适的材质等级
let materialTypes: Array<hdsMaterial.MaterialType> = hdsMaterial.getSystemMaterialTypes();
if (materialTypes.indexOf(hdsMaterial.MaterialType.IMMERSIVE) < 0) {
// 当前设备不支持IMMERSIVE材质类型,则使用SMOOTH效果以优化性能,降低卡顿和发热风险
this.customMaterialLevel = hdsMaterial.MaterialLevel.SMOOTH;
}
}
build() {
HdsNavigation() {
HdsTabs({ controller: this.controller }) {
ForEach(MENU_CONFIG, (item: MenuItem) => {
TabContent() {
Stack() {
Scroll(this.scrollerForScroll) {
Column() {
Image($r('app.media.scenery01')).width('100%') // scenery为自定义资源,开发者需替换本地资源
}
}
.clipContent(ContentClipMode.SAFE_AREA)
.height('100%')
}
}
.tabBar(new BottomTabBarStyle({
normal: item.symbolGlyph, selected: item.symbolGlyph1
}, item.label))
})
}
.barOverlap(true)
.vertical(false)
.barPosition(BarPosition.End)
.barFloatingStyle({
barBottomMargin: 28,
systemMaterialEffect: {
materialType: hdsMaterial.MaterialType.ADAPTIVE,
materialLevel: this.customMaterialLevel // 底部悬浮页签自定义沉浸光感材质效果
}
})
}
.mode(NavigationMode.Stack)
.titleBar({
content: {
title: {
mainTitle: 'MainTitle',
},
menu: this.menus,
},
style: {
scrollEffectOpts: {
enableScrollEffect: false,
scrollEffectType: ScrollEffectType.GRADIENT_BLUR,
},
systemMaterialEffect: {
materialType: hdsMaterial.MaterialType.ADAPTIVE,
materialLevel: this.customMaterialLevel // 标题栏按钮自定义沉浸光感材质效果
},
},
avoidLayoutSafeArea: false,
enableComponentSafeArea: false
})
.bindToScrollable([this.scrollerForScroll])
.hideBackButton(false)
.titleMode(HdsNavigationTitleMode.MINI)
.ignoreLayoutSafeArea([LayoutSafeAreaType.SYSTEM], [LayoutSafeAreaEdge.TOP, LayoutSafeAreaEdge.BOTTOM])
}
}
interface MenuItem {
symbolGlyph: SymbolGlyphModifier,
symbolGlyph1: SymbolGlyphModifier,
label: string,
defaultBgColor: ResourceColor,
hoverBgColor: ResourceColor,
pressBgColor: ResourceColor,
};
const MENU_CONFIG: MenuItem[] = [
{
symbolGlyph: new SymbolGlyphModifier($r('sys.symbol.alarm_fill_1')).renderingStrategy(SymbolRenderingStrategy.MULTIPLE_COLOR)
.fontColor([$r('sys.color.ohos_id_color_bottom_tab_icon_off'),
$r('sys.color.ohos_id_color_bottom_tab_icon_auxcolor_off02')]),
symbolGlyph1: new SymbolGlyphModifier($r('sys.symbol.alarm_fill_1')).renderingStrategy(SymbolRenderingStrategy.MULTIPLE_COLOR)
.fontColor([$r('sys.color.ohos_id_color_activated'), $r('sys.color.ohos_id_color_primary_contrary')]),
label: '闹钟',
defaultBgColor: Color.Transparent,
hoverBgColor: $r('sys.color.ohos_id_color_hover'),
pressBgColor: $r('sys.color.ohos_id_color_click_effect')
},
{
symbolGlyph: new SymbolGlyphModifier($r('sys.symbol.worldclock_fill_2')).renderingStrategy(SymbolRenderingStrategy.MULTIPLE_COLOR)
.fontColor([$r('sys.color.ohos_id_color_bottom_tab_icon_off'),
$r('sys.color.ohos_id_color_bottom_tab_icon_auxcolor_off02')]),
symbolGlyph1: new SymbolGlyphModifier($r('sys.symbol.worldclock_fill_2')).renderingStrategy(SymbolRenderingStrategy.MULTIPLE_COLOR)
.fontColor([$r('sys.color.ohos_id_color_activated'), $r('sys.color.ohos_id_color_primary_contrary')]),
label: '时钟',
defaultBgColor: Color.Transparent,
hoverBgColor: $r('sys.color.ohos_id_color_hover'),
pressBgColor: $r('sys.color.ohos_id_color_click_effect')
},
{
symbolGlyph: new SymbolGlyphModifier($r('sys.symbol.stopwatch_2')).renderingStrategy(SymbolRenderingStrategy.MULTIPLE_COLOR)
.fontColor([$r('sys.color.ohos_id_color_bottom_tab_icon_off'),
$r('sys.color.ohos_id_color_bottom_tab_icon_auxcolor_off02')]),
symbolGlyph1: new SymbolGlyphModifier($r('sys.symbol.stopwatch_2')).renderingStrategy(SymbolRenderingStrategy.MULTIPLE_COLOR)
.fontColor([$r('sys.color.ohos_id_color_activated'), $r('sys.color.ohos_id_color_primary_contrary')]),
label: '秒表',
defaultBgColor: Color.Transparent,
hoverBgColor: $r('sys.color.ohos_id_color_hover'),
pressBgColor: $r('sys.color.ohos_id_color_click_effect')
}
];
参考文档:使用自定义沉浸光感效果
此外也可参考三方组件库:hds_button
更多关于HarmonyOS鸿蒙Next中顶栏沉浸光感按钮的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
看了下鸿蒙7的发布会,等7吧,到时候好像各种组件都提供接口了,
这个目前没有现成的组件,可以魔改封装多个HdsTabs实现(一个按钮用一个HdsTabs),关于自定义Tab内容可以参考我的这篇实战文章:
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17,
还是推荐官方的集合:
【开发者实践】HarmonyOS 6.1.0 创新特性“悬浮页签+沉浸光感”精品文章专题

刚刚发现官方的一个新demo,参考一下:
https://gitcode.com/HarmonyOS_Samples/Spatialization/tree/dev
HarmonyOS的分布式文件系统让我在多设备间传输文件变得轻松无比。
开发者您好,目前没有现成的组件,可以魔改封装多个HdsTabs实现(一个按钮用一个HdsTabs),
期待HarmonyOS能在未来推出更多针对特定场景的优化功能。
开发者您好,预计【26年9月下旬到10月上旬】交付,版本发布时间以官网为准。
支持一下
HdsTab组件
HdsTab结合Blank+非安全区,
在HarmonyOS Next中,顶栏沉浸光感按钮通过ArkUI实现。启用全屏沉浸使用windowStage.getMainWindow().setWindowLayoutFullScreen(true)。利用@State和@Watch监听环境亮度或背景色,调用@ohos.multimedia.image分析区域亮度,动态切换按钮foregroundColor或image资源,达成自动光感适配。


