HarmonyOS鸿蒙Next中Hdsnavigation组件(API18上测试)深浅色模式切换,顶部模糊状态会丢失。
HarmonyOS鸿蒙Next中Hdsnavigation组件(API18上测试)深浅色模式切换,顶部模糊状态会丢失。 Hdsnavigation组件(API18上测试)深浅色模式切换,顶部模糊状态会丢。是我打的有问题吗?就是CV略改官方代码啊。(¤﹏¤)
更多关于HarmonyOS鸿蒙Next中Hdsnavigation组件(API18上测试)深浅色模式切换,顶部模糊状态会丢失。的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在API 18的HdsNavigation 的 scrollEffectType 动态模糊样式默认可能未适配系统深浅色模式,需手动指定 colorMode 参数。你这大概率是丢失模糊。
更多关于HarmonyOS鸿蒙Next中Hdsnavigation组件(API18上测试)深浅色模式切换,顶部模糊状态会丢失。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
一会我去试试。等19看看,希望能全推19,因为我用API19的模拟器没有问题(之后试试API18的模拟器看看)。
跟暗黑模式没有关系,我测试了一下,标题栏的初始颜色跟originalStyle有关,如果设置了该属性会变成预先设置的颜色,如果没有设置originalStyle,初始颜色跟背景颜色一致,其次下拉过程中标题栏的背景颜色跟背景颜色相关,背景是什么颜色就是什么颜色,参考demo:
// 模块导入
import { HdsNavigation, HdsNavigationAttribute, ScrollEffectType, HdsNavigationTitleMode } from '@kit.UIDesignKit';
import { LengthMetrics } from '@kit.ArkUI';
const TITLE_BAR_HEIGHT_MINI: number = 50;
@Entry
@Component
struct Index {
private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
@Provide('pageInfos') pageInfos: NavPathStack = new NavPathStack();
scroller: Scroller = new Scroller();
@State blankHeight: number = TITLE_BAR_HEIGHT_MINI;
@State isHideBackButton: boolean = false;
@State titleMode: HdsNavigationTitleMode = HdsNavigationTitleMode.MINI;
@State subTitle: string = 'Sub';
build() {
HdsNavigation(this.pageInfos) { // 创建HdsNavigation组件
Column() {
Stack() {
Scroll(this.scroller) { // 内容区设置可滚动容器组件,用于实现内容区滚动联动标题栏动态模糊效果
Column() {
// HdsNavigation标题栏与内容区默认设置堆叠布局,可以在内容区叠加标题栏高度的Blank,防止内容区被标题栏遮挡
Blank().height(this.blankHeight)
Image($r('app.media.background'))
.width('100%')
Button('pushPath', { stateEffect: true, type: ButtonType.Capsule })
.width('80%')
.height(40)
.margin({ top: '5%', right: '50vp', left: '50vp' })
.onClick(() => {
console.info('HDS_BASE_COMPONENT', `onClick firstPage`);
this.pageInfos.pushPath({ name: 'pageOne' })
})
Button('hide backButton ' + this.isHideBackButton)
.onClick(() => {
this.isHideBackButton = !this.isHideBackButton
})
.width('80%')
.height(40)
.margin({ top: '5%', right: '50vp', left: '50vp' , bottom: '5%'})
List({ space: 12, initialIndex: 0 }) {
ForEach(this.arr, (item: number) => {
ListItem() {
Text('' + item)
.width('100%')
.height(72)
.fontSize(16)
.fontWeight(500)
.textAlign(TextAlign.Center)
}
.height(120)
.backgroundColor(Color.Orange)
.borderRadius(24)
}, (item: number) => item.toString())
}
.edgeEffect(EdgeEffect.None)
.width('100%')
.height('100%')
.nestedScroll({scrollForward: NestedScrollMode.PARENT_FIRST, scrollBackward: NestedScrollMode.PARENT_FIRST})
}
}
.edgeEffect(EdgeEffect.Spring).scrollBar(BarState.Off)
}
}
// .backgroundColor(Color.Red)
}
.titleBar({
style: { // HdsNavigation标题栏样式设置
// 标题栏动态模糊样式,包括是否使能滚动动态模糊,动态模糊类型,动态模糊生效的滚动距离等
scrollEffectOpts: {
enableScrollEffect: true,
scrollEffectType: ScrollEffectType.COMMON_BLUR,
blurEffectiveStartOffset: LengthMetrics.vp(0),
blurEffectiveEndOffset: LengthMetrics.vp(20)
},
originalStyle: {
backgroundStyle: {
backgroundColor:'#87CEEB ',
},
contentStyle: {
titleStyle: { mainTitleColor: $r('sys.color.font_primary'), subTitleColor: $r('sys.color.font_secondary') },
menuStyle: { backgroundColor: $r('sys.color.comp_background_tertiary'), iconColor: $r('sys.color.icon_primary') },
backIconStyle: { backgroundColor: $r('sys.color.comp_background_tertiary'), iconColor: $r('sys.color.icon_primary') }
}
}, scrollEffectStyle: {
backgroundStyle: {
backgroundColor: $r('sys.color.ohos_id_color_background_transparent'),
},
contentStyle: {
titleStyle: { mainTitleColor: $r('sys.color.font_primary'), subTitleColor: $r('sys.color.font_secondary') },
menuStyle: { backgroundColor: $r('sys.color.comp_background_tertiary'), iconColor: $r('sys.color.icon_primary') },
backIconStyle: { backgroundColor: $r('sys.color.comp_background_tertiary'), iconColor: $r('sys.color.icon_primary') }
}
}
},
content: { // HdsNavigation标题栏内容区设置
title: { // HdsNavigation标题栏标题设置
mainTitle: 'Main',
subTitle: this.subTitle
},
menu: { // HdsNavigation标题栏菜单项设置
value: [{
content: {
label: 'menu1',
icon: $r('sys.symbol.ohos_wifi'),
isEnabled: true,
},
badge: {
count: 1,
}
}, {
content: {
label: 'menu2',
icon: $r('sys.symbol.ohos_lock'),
isEnabled: true,
action: () => {
console.info("HDS_NAV HELLO 2");
}
}
}, {
content: {
label: 'menu3',
icon: $r('sys.symbol.speaker_plus'),
}
}, {
content: { // 第三个菜单项内容设置
label: 'menu4',
icon: $r('sys.symbol.ohos_star'),
}
}]
},
backIcon: { // HdsNavigation返回按钮设置
label: 'backButton',
icon: $r('sys.symbol.ohos_mic'),
isEnabled: true,
}
}
})
.titleMode(this.titleMode)
.hideBackButton(this.isHideBackButton)
}
}
我晚上看看,但是API18不会这样。。就是深浅色模式切换,(如果原来是模糊状态的话)标题栏模糊状态会没。。。
呸,API19的模拟器没有这个问题,切换深浅色,模糊会一直在。大概是丢失模糊,
鸿蒙Next中Hdsnavigation组件在API18上测试时,深浅色模式切换会导致顶部模糊状态丢失。此问题可能由系统主题变更时模糊效果未正确重建引起。建议检查WindowManager.LayoutParams的FLAG_BLUR_BEHIND属性设置,并确认在onConfigurationChanged回调中重新应用模糊效果。该组件对系统主题变化的响应处理可能存在缺陷,需要针对鸿蒙的UI刷新机制进行适配。
在HarmonyOS Next中,Hdsnavigation组件在深浅色模式切换时丢失顶部模糊状态的问题确实存在。这是API18版本的一个已知问题,主要原因是主题切换时模糊效果的重新渲染机制存在缺陷。
建议检查以下几点:
- 确保在onConfigurationChanged回调中正确处理了主题变更事件
- 尝试手动调用setBlurEffect()方法重新设置模糊效果
- 临时解决方案可以在主题切换后强制刷新导航栏
该问题预计会在后续API版本中修复,目前可以通过上述临时方案规避。