HarmonyOS鸿蒙Next中RichEditor setTypingStyle预置文本样式后,切换深浅色模式,文本颜色未跟随深浅色模式变换
HarmonyOS鸿蒙Next中RichEditor setTypingStyle预置文本样式后,切换深浅色模式,文本颜色未跟随深浅色模式变换
使用如下demo,设置一个正常的输入内容的normalStyle文本颜色,一个按钮设置另外一个atUserStyle颜色添加内容。 当点击按钮插入文本内容后,软键盘输入文本内容,在切换深色模式时,软键盘输入的文本内容不会跟随深浅色模式变化。:
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
richEditorController: RichEditorController = new RichEditorController()
normalStyle: RichEditorTextStyle = {
fontColor: $r('sys.color.font_primary'),
fontSize: $r('sys.float.Body_L')
}
atUserStyle: RichEditorTextStyle = {
fontColor: $r('sys.color.font_emphasize'),
fontSize: $r('sys.float.Body_L')
}
build() {
Column() {
RichEditor({controller: this.richEditorController})
.onReady(() => {
this.richEditorController.setTypingStyle(this.normalStyle)
})
.width('80%')
.height('50%')
.border({
width: 1,
color: Color.Black
})
.backgroundColor($r('sys.color.ohos_id_color_sub_background'))
Button('@')
.onClick(() => {
this.richEditorController.addTextSpan('@张三', {
style: this.atUserStyle
})
})
}
.alignItems(HorizontalAlign.Center)
.width('100%')
}
}
更多关于HarmonyOS鸿蒙Next中RichEditor setTypingStyle预置文本样式后,切换深浅色模式,文本颜色未跟随深浅色模式变换的实战教程也可以访问 https://www.itying.com/category-93-b0.html
历史版本确实setTypingStyle后,键盘输入文本颜色未在深浅色切换时跟随的问题。
新版本已修复,可以使用最新版本尝试。
更多关于HarmonyOS鸿蒙Next中RichEditor setTypingStyle预置文本样式后,切换深浅色模式,文本颜色未跟随深浅色模式变换的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,RichEditor的setTypingStyle方法用于设置文本样式,但预置的文本样式可能未自动适配深浅色模式。这是因为预置样式中的颜色值可能是固定的,未使用系统提供的动态颜色资源。要解决此问题,需在设置文本样式时使用系统动态颜色资源,如ohos:attr/colorPrimary
,以确保文本颜色能随深浅色模式自动切换。
这是一个典型的动态主题适配问题。在HarmonyOS Next中,RichEditor的文本颜色不会自动响应系统主题变化,因为setTypingStyle
设置的样式是静态的。
解决方案是监听主题变化并重新设置样式:
- 添加主题状态监听:
@State currentTheme: Resource = $r('sys.color.font_primary')
aboutToAppear() {
themeManager.on('colorModeChange', (newMode) => {
this.currentTheme = newMode === 'dark' ?
$r('sys.color.font_primary_dark') :
$r('sys.color.font_primary')
this.updateEditorStyle()
})
}
updateEditorStyle() {
this.normalStyle.fontColor = this.currentTheme
this.richEditorController.setTypingStyle(this.normalStyle)
}
- 修改样式定义使用动态颜色:
normalStyle: RichEditorTextStyle = {
fontColor: this.currentTheme,
fontSize: $r('sys.float.Body_L')
}
这样当主题切换时,文本颜色会自动更新。对于已插入的文本,可能需要遍历内容重新应用样式。