HarmonyOS 鸿蒙Next中图文混排
HarmonyOS 鸿蒙Next中图文混排
一、场景概述
图文混排是指在同一布局中将文字与图片有机结合,形成更具表现力的 UI 展示方式。它不仅仅是简单地放置一个Text或Image,而是通过布局策略让两者在视觉上协调,增强信息传达效果。常见形式包括文字环绕图片、图上叠加文字、图标与文字组合等,广泛应用于商品详情页、新闻正文、卡片组件、标签徽章等场景。
1.1 使用场景
图文混排在空间充足时,通过调整组件的位置与展示方式,在左右布局与上下布局之间切换,用以展示更多内容或提高用户体验。图文组合与自适应导航均属于挪移布局的一种,单页面分上下两部分,上图下文。图片区固定,文字区可滑动。并且根据不同的设备宽度调整左图右文的比例显示。包括:直板机、PAD、PC、TV、座舱、折叠屏(阔折叠、双折叠、三折叠)。
说明
图1 基准直板机、双折叠外屏、三折叠F态,横屏、竖屏布局如下(图文高度比 6:4,默认系统安全区不考虑挖孔避让)


图2 在阔折叠的内屏、外屏以如下方式显示(内屏与直板机相同处理)

图3 在双折叠展开态、三折叠M态、Pad mini,横屏、竖屏以如下方式显示(横竖屏:6:4)


图4 平板和三折叠G态的横屏、竖屏以如下方式显示(横屏1:1,竖屏:6:4)


图 5 pc端如下方式显示


图 6 座舱、tv如下方式显示


1.2 常见问题
图 7 三屏态下首页、详情页显示大图、留白

1.3 多设备适配
1.3.1 图片与文字段落区域尺寸多设备自适应适配
图片、文字区域,支持依据设备窗口宽度调整最佳展示比例。


1.3.2 图文组合适配窗口变化
1、图文组合响应横竖屏切换引起的窗口变化,文字区支持滚动条形式展示避免遮挡、截断


2、图文组合响应分屏引起的窗口变化,基于握持方向窗口宽度判断展示形态

3、图文组合响应悬浮窗引起的窗口变化,基于握持方向窗口宽度判断展示形态,避让状态栏

二、开发指导
2.1 H5开发
2.1.1 关键能力
图文混排关键能力是识别不同设备,调整不同比列,这部分功能主要通过以下能力进行实现,包含以下几个核心api。
通过Web组件的src属性引入H5页面,并使用**registerJavaScriptProxy()**原生侧方法,将JavaScript对象注入到window对象中,从而在window对象中调用该对象的方法,实现H5页面调用原生方法。
Web({ src: 'http://localSampleWSC0170/MainPage', controller: this.webController })
.onControllerAttached(() => {
this.webController.registerJavaScriptProxy(this, 'webClass', ['pushToPage', 'clearPage', 'getLastPage']);
this.webController.refresh();
})
breakpointsStore:断点工具类,根据breakpointStore.curBreakpoint获取屏幕当前端点值,根据端点值判断图文混排比例分配。
const layout = computed(() => {
const breakpoint = breakpointStore.curBreakpoint
if (breakpoint === 'xs' || breakpoint === 'sm') {
return 'vertical'
} else {
return 'horizontal'
}
})
2.1.2 指导案例
以图文混排为例,在vue开发框架下给出具体的开发指导。
1、由于图文混排是根据断点进行比例适配,我们需要用到web_adaptive_layout_vue3里面封装的组件MultiDiversionVue, DiversionItemVue,根据断点值选择对应的界面显示,达到比例显示。
<template>
<div class="page-wrapper">
<MultiDiversionVue
:direction="direction"
:splitLine="splitLine">
<DiversionItemVue
name="image-section"
:diversion-cols="imageCols">
<div :class="imageInnerClass">
<img class="image-content" src="./picture.png" alt="示例图片">
</div>
</DiversionItemVue>
<DiversionItemVue
name="text-section"
:diversion-cols="textCols">
<!-- Use different class names for portrait and landscape -->
<div v-if="isVertical" class="text-area-vertical">
<h2 class="text-title">{{ title }}</h2>
<p class="text-content">{{ description }}</p>
</div>
<div v-else class="text-area-horizontal">
<h2 class="text-title">{{ title }}</h2>
<p class="text-content">{{ description }}</p>
</div>
</DiversionItemVue>
</MultiDiversionVue>
</div>
</template>
2、设置布局样式
根据断点判断布局样式,在xs、sm时布局为上下结构,大屏时为左右结构,代码如下。
// Direction config: set by breakpoint
const direction = computed(() => {
return {
xs: 'vertical',
sm: 'vertical',
md: 'horizontal',
lg: 'horizontal',
xl: 'horizontal'
}
})
根据断点设置图文所占屏幕比例。
// Image column config - controls width ratio
const imageCols = computed(() => {
return {
xs: 12,
sm: 12,
md: 7,
lg: 6,
xl: 6
更多关于HarmonyOS 鸿蒙Next中图文混排的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,图文混排主要通过ArkUI的Text组件结合Span组件实现。开发者可以使用Span的decoration属性设置文本样式,并通过ImageSpan嵌入图片。布局时,图片与文本可灵活组合,支持设置图片大小、对齐方式及间距。此外,利用富文本能力,可在同一文本区域内混合不同样式的文字与图像,确保界面元素协调统一。
更多关于HarmonyOS 鸿蒙Next中图文混排的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中实现图文混排,核心在于利用ArkUI的声明式UI能力和响应式布局系统,实现跨设备自适应。根据你的场景描述,以下是关键实现方案:
1. 布局选择与自适应策略
- 核心组件:使用
Flex、Row、Column、GridRow/GridCol或RelativeContainer进行图文组合布局。 - 断点系统:通过
@ohos.mediaquery或breakpointsStore(Web场景)监听设备断点(xs, sm, md, lg, xl),动态调整布局方向(垂直/水平)和比例。 - 比例控制:根据断点设置图片与文字区域的宽度比例(如6:4、1:1),示例中通过
imageCols和textCols映射不同断点下的栅格占比实现。
2. 多设备适配关键点
- 折叠屏适配:利用
display.getDefaultDisplay()获取屏幕信息,结合window.getLastWindow()监听窗口变化,在折叠状态切换时调整布局。 - 横竖屏响应:通过
mediaquery或window.on('windowSizeChange')监听屏幕方向变化,切换图文排列方式。 - 避让处理:使用
safeArea组件或window.getWindowAvoidArea()获取安全区域,避免刘海屏、状态栏遮挡。
3. 图文混排具体实现
- ArkTS/ArkUI方案:
// 使用Grid布局示例 GridRow() { GridCol({ span: { xs: 12, sm: 12, md: 6, lg: 6 } }) { Image($r('app.media.image')) .aspectRatio(1.5) // 控制图片比例 .objectFit(ImageFit.Contain) } GridCol({ span: { xs: 12, sm: 12, md: 6, lg: 6 } }) { Text('图文混排内容') .fontSize(16) .padding(10) } } .onBreakpointChange((breakpoint) => { // 根据断点调整布局参数 }) - 文字环绕效果:可通过
RelativeContainer绝对定位或Shape组件实现自定义环绕。
4. 性能与体验优化
- 图片自适应:使用
Image组件的objectFit属性(如Contain、Cover)确保图片在不同比例下正常显示。 - 文字区域滚动:长文本可嵌套
Scroll或List组件,避免内容截断。 - 资源按需加载:结合
LazyForEach与GridItem实现大量图文列表的懒加载。
5. Web/H5场景补充
- 如示例所述,通过
Web组件加载H5页面时,利用registerJavaScriptProxy()实现原生与Web的通信,传递断点信息。 - 在Vue3等框架中,使用
MultiDiversionVue等自适应组件,根据断点动态切换CSS样式。
总结:HarmonyOS Next的图文混排应以响应式栅格系统为基础,结合断点查询与窗口监听,实现从手机到平板、折叠屏、PC的多设备流畅适配。重点在于布局结构的动态切换与比例调整,而非固定尺寸控制。

